添加像' %%'这样的where子句导致任何性能问题?

时间:2016-12-30 12:37:20

标签: database where-clause oracledb

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

1 个答案:

答案 0 :(得分:3)

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

where子句添加条件可能会至少以三种方式影响性能:

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

如果您的查询很简单:

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

然后前两点不相关。第三点略有相关性。问题是数据库是否优化"远离like(因为模式是通用的)。我不认为这样做;它必须用col is not null替换它。

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