与条件较少的sql相比,条件更多的sql更快吗?

时间:2019-05-26 13:01:03

标签: mysql sql sql-optimization

我有一个大表需要每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更快(或它们也同样快)? 谢谢。

1 个答案:

答案 0 :(得分:1)

如果执行此查询:

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';'

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

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

相关问题