2016-12-30 134 views
-1

我正在写一个查询,它将通过我的程序在数据库上执行。在该查询中,我使用从客户端发送的值添加了where子句。在某些值不存在的情况下,我将它留空(即它看起来像select * from tablename where columname like '%%' and columname1 like '%%')。这是否会导致任何性能问题?添加where子句(如'%%')会导致任何性能问题?

+0

请用你正在使用的数据库标记你的问题。 –

+0

根据条件检查内容并构建查询会很复杂吗? – AxelH

回答

3

回答这个问题的最好方法是通过测试。您应该尝试使用和不使用条件的查询。

添加条件到where子句可以至少在三个方面影响性能:

  • 条件可以使它更难以优化使用索引(或选择适当的分区)的查询。
  • 条件可以改变表的“选择性”。如果优化器不知道被选择的行数,那么它可能会选择一个效率较低的连接和聚合算法。
  • 评估条件本身可能很昂贵。

如果查询很简单:

select t.* 
from t 
where col like '%%'; 

然后前两点是不相关的。第三个有点相关。问题是数据库是否“优化”了like(因为该模式是通用的)。我不认为它确实如此;它将不得不用col is not null来代替它。

使用like有一些开销。我会推测like的开销远低于首先阅读表的开销。所以,虽然它可能会影响性能,但在一个简单的情况下,效果会相对较小。