我很好奇,因为我在文档中读到了它。是否写作
select * from CONTACTS where id = ‘098’ and name like ‘Tom%’;
加快查询速度,而不是
select * from CONTACTS where name like ‘Tom%’ and id = ‘098’;
第一个在左侧有一个索引列。它实际上是加快速度还是迷信?
使用 php 和 mysql
我很好奇,因为我在文档中读到了它。是否写作
select * from CONTACTS where id = ‘098’ and name like ‘Tom%’;
加快查询速度,而不是
select * from CONTACTS where name like ‘Tom%’ and id = ‘098’;
第一个在左侧有一个索引列。它实际上是加快速度还是迷信?
使用 php 和 mysql
使用 . 检查查询计划explain
。它们应该完全相同。
这纯粹是迷信。我看不出任何一个查询的速度会有所不同。但是,如果它是 OR 查询而不是 AND 查询,那么我可以看到将其放在左侧可能会加快速度。
有趣的问题,我试过一次。查询计划相同(使用EXPLAIN
)。
但是考虑到短路评估,我也想知道为什么没有区别(或者mysql是否完全评估布尔语句?)
关于通配符位于 Like 谓词中的字符串文字的哪一侧,您可能记错或误读了其他内容。将通配符放在右侧(如 yr 示例中),允许查询引擎使用您正在搜索的表列上可能存在的任何索引(在本例中为名称)。但是如果你把通配符放在左边,
select * from CONTACTS where name like ‘%Tom’ and id = ‘098’;
那么引擎就不能使用任何现有的索引并且必须进行完整的表扫描。