我有一个大表需要每隔5分钟由datetime列查询一次。

我的解决方案是这样的:

select * from tbl_name where datetime_col < '2019-05-26 20:49:00' and tag_col = 0;


,然后对结果集进行操作,如果“操作”成功,则更新行并将tag_col设置为1。

我的一位同事有这样的解决方案:

select * from tbl_name where datetime_col < '2019-05-26 20:49:00' and datetime_col >= '2019-05-26 20:44:00' and tag_col = 0;


,然后对结果集执行某些操作,如果“某事”失败,请更新该行,并在datetime_col中添加5分钟(以便下次选择该行),如果“某事”成功,则也请更新该行并将tag_col设置为1。

我的问题是,当datetime_col上有索引时,谁的sql更快(或它们也同样快)?
谢谢。

最佳答案

如果执行此查询:

select *
from tbl_name
where datetime_col < '2019-05-26 20:49:00'


大概您将要返回很多数据,因为按照您的描述,您有一个“大表”。然后,您必须仔细研究以获得所需的结果。

如果执行:

select *
from tbl_name
where datetime_col < '2019-05-26 20:49:00'
order by datetime_col desc;


然后,我认为MySQL将使用索引并能够返回所需的行。但是,您仍然返回很多行。您应该测试性能是否还可以。

您的同事的查询是:

select *
from tbl_name
where datetime_col < '2019-05-26 20:49:00' and
      datetime_col >= '2019-05-26 20:44:00';'


这仅返回您想要的行-可能是更小的集合。它应该使用索引来查找那些行。

我希望你的同事是正确的。即使行不存在并且您必须发出另一个查询,这也可能比返回几乎整个表更快。

关于mysql - 与条件较少的sql相比,条件更多的sql更快吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56313738/

10-11 03:10