我很好奇是否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. 目前尚不清楚哪个是主导因素,但从磁盘读取数据可能会主导查询。