query1-> select * from table where name like '%xyz'
query2-> select * from table where name like 'xyz%'
在这两个查询中,哪个是最快的,为什么?
如何提高慢查询的性能?
答案 0 :(得分:2)
简短的回答:如果name
上有索引,则Query2会更快。
长答案:
我想name
上有一个索引。
InnoDB使用B树索引,这是一个非常简化的图片,它的外观如何: B-tree
如果where条件以%
(通配符)开头,则InnoDB不知道它是否必须从根节点向左或向右移动。因此它将扫描整个表。
如果条件以示例D
开头,则InnoDB知道它必须继续进行,最后,它将找到叶子节点。这需要更少的步骤,更少的读取,并且更快。
结论,如果您的where条件以%
开头,并且始终是全表扫描。