2

我很好奇是否LIKE可以通过使用静态子句元素来优化使用子句。

这个查询是

(SELECT * FROM n where n.name = 'x' AND n.body LIKE '%x%';)

比这个快

(SELECT * FROM n WHERE n.body LIKE '%x%';)

我用的是mysql。

4

2 回答 2

8

您可以使用EXPLAIN来了解哪个查询更快。

作为一般概念,静态查询比LIKE查询更好。因此,如果您添加一些,它会变得更快。

但前提是它实际上减少了LIKE和静态查询使用和索引的行。

原则是LIKE样式查询(连同必须扫描字段内容的其他查询)是昂贵的。(请参阅 中的costEXPLAIN)因此,如果您减少需要为查询处理的行数,LIKE那么查询会变得更快。

究竟是什么让什么情况下的查询速度很快,通常很难回答。您应该向他们提出准确的问题,包括对您的具体情况的描述(DBMS、表模型、索引、数据量、EXPLAIN调用结果等)以获得有效的答案。

于 2013-06-24T18:47:07.843 回答
2

如果你有一个索引,它可能会更快n.name。我相信 MySQL 在列上可用时总是使用索引。如果只有几行有n.name = 'x',那么引擎将选择这些行并like仅对它们执行操作。

因为like两边都有通配符,所以它不能利用索引。

如果没有索引,那么额外的比较会在查询中增加非常非常少的开销,尽管它也可能会使like. 目前尚不清楚哪个是主导因素,但从磁盘读取数据可能会主导查询。

于 2013-06-24T18:49:03.680 回答