簡體   English   中英

SQL游標查詢或兩個單獨的查詢:哪種效率更高?

[英]SQL Cursor Query or Two Separate Queries: Which Would Be More Efficient?

我正在努力使一些處理PHP中的消息樹的代碼更高效。 數據存儲在SQL數據庫中,目前每條消息必須執行2條SQL查詢,其中1條用於查找數據,而1條用於更新數據。 我認為我有一個方法可以通過單個查詢完成此操作,但是它使用的游標比其他SQL方法要慢得多。

有誰知道用一個游標執行一個SQL查詢是否仍然會更有效,還是最好還是堅持使用對每個消息使用select和update查詢以及PHP將查詢綁定在一起的當前方法?

同意@Catcall-在看不到代碼的情況下,很難有意義地回答這個問題。

但是,從廣義上講,人們經常說游標比其他SQL方法慢的原因是因為某些開發人員在可以使用基於集合的操作的地方使用了游標。

例如,如果您的計划是(使用偽代碼,而沒有實際的數據庫引擎或架構)

create cursor RecordsToUpdate
as
select *
from UserTable
where name like 'Codd%'

foreachRecord in RecordsToUpdate
  set record.lastUpdatedDate = today
next

很明顯,您可以通過執行

update UserTable
set lastUpdatedDate = today
where name like 'Codd%'

但是,在某些情況下,基於集合的操作是不可能的,然后-廣義上講-創建游標,執行邏輯並關閉游標會更有效-理想情況下是在存儲過程或某些操作中。 這種方法限制了將數據發送回PHP服務器的網絡開銷。

說了這么多-在大多數情況下,您不會注意到實際場景中的差異。 另外,值得指出的是,如果數據庫負載沉重,或者查詢執行緩慢(例如,通過遍歷具有數百萬條記錄的游標),則此方法可能會造成數據庫服務器瓶頸。 廣義上講,您要盡可能避免在數據庫上有長時間運行的作業-最好將它們拆分成許多小作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM