我很好奇是否可以使用静态子句元素来优化使用LIKE
子句。
这是查询
(SELECT * FROM n where n.name = 'x' AND n.body LIKE '%x%';)
比这个更快
(SELECT * FROM n WHERE n.body LIKE '%x%';)
我使用的是mysql。
答案 0 :(得分:8)
您可以使用EXPLAIN
来了解哪个查询更快。
作为一般概念,静态查询比LIKE
查询更好。因此,如果添加一些内容会更快。
但前提是它实际上减少了LIKE
的行,静态查询使用和索引。
原则是LIKE
样式查询(与其他必须扫描字段内容的查询一起)很昂贵。 (请参阅cost
中的EXPLAIN
列)
因此,如果减少需要为LIKE
处理的行数,查询会变得更快。
究竟什么样的查询在什么情况下很难快速回答。您应该向他们提出准确的问题,包括对具体情况的描述(DBMS,表模型,索引,数据量,EXPLAIN
调用的结果等)以获得有效的答案。
答案 1 :(得分:2)
如果您有n.name
的索引,可能会更快。我相信MySQL总是在列上可用时使用索引。如果只有几行n.name = 'x'
,则引擎将选择这些行并仅对它们执行like
操作。
由于like
双方都有通配符,因此无法利用索引。
如果没有索引,那么额外的比较会在查询中添加非常非常少量的开销,尽管它也可能使like
短路。目前还不清楚哪个是主导因素,但无论如何从磁盘读取数据可能会主导查询。