查询具有良好性能的放松状态?

时间:2012-08-31 07:29:58

标签: sql search plsql

我有这样的代码:

Search(for 'this' using 'a','b','c','d')
if result is not found
    search(for 'this' using null,'b','c','d')
    if result is not found
      ...
      if result is not found
           search(for 'this' using null,null,null,null)
 ...
return 

它的存储过程以递归方式调用自身但参数较少。 函数内部是一个基于参数生成的动态查询(一些参数涉及连接另一个表,一些只是where子句中的附加条件)

我被告知这会浪费性能,因为它需要一次又一次地重新搜索整个表格。

我有点认为,如果我们首先搜索所有内容,然后从该结果中开始过滤它。它可能会更好。

我可以做些什么来改善代码?有没有办法通过普通查询获得相同的结果?

1 个答案:

答案 0 :(得分:0)

您可以使用UNION,如:

SELECT * FROM TABLE
  WHERE COL1='A'     AND COL2='B' AND COL3 = 'C' AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2='B' AND COL3 = 'C' AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2 IS NULL AND COL3 = 'C' AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2 IS NULL AND COL3 IS NULL AND COL4 = 'D'
UNION ALL
SELECT * FROM TABLE
  WHERE COL1 IS NULL AND COL2 IS NULL AND COL3 IS NULL AND COL4 IS NULL

分享并享受。