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