1

我很好奇,因为我在文档中读到了它。是否写作

select * from CONTACTS where id = ‘098’ and name like ‘Tom%’;

加快查询速度,而不是

select * from CONTACTS where name like ‘Tom%’ and id = ‘098’;

第一个在左侧有一个索引列。它实际上是加快速度还是迷信?

使用 php 和 mysql

4

4 回答 4

2

使用 . 检查查询计划explain。它们应该完全相同。

于 2009-09-09T13:28:05.460 回答
0

这纯粹是迷信。我看不出任何一个查询的速度会有所不同。但是,如果它是 OR 查询而不是 AND 查询,那么我可以看到将其放在左侧可能会加快速度。

于 2009-09-09T13:23:07.143 回答
0

有趣的问题,我试过一次。查询计划相同(使用EXPLAIN)。

但是考虑到短路评估,我也想知道为什么没有区别(或者mysql是否完全评估布尔语句?)

于 2009-09-09T13:33:27.600 回答
0

关于通配符位于 Like 谓词中的字符串文字的哪一侧,您可能记错或误读了其他内容。将通配符放在右侧(如 yr 示例中),允许查询引擎使用您正在搜索的表列上可能存在的任何索引(在本例中为名称)。但是如果你把通配符放在左边,

select * from CONTACTS where name like ‘%Tom’ and id = ‘098’;

那么引擎就不能使用任何现有的索引并且必须进行完整的表扫描。

于 2009-09-09T13:33:34.363 回答