繁体   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