使用可选参数快速查询而无需动态查询

时间:2015-02-02 20:30:50

标签: sql oracle oracle11g

在网络上searching for a solution之后进行慢速查询。我注意到将查询转换为动态查询会使其执行得更快。这似乎与传递不同参数时使用的错误执行计划有关。

这很慢

SELECT ProductID, ProductName FROM TransactionHistory
WHERE (ProductID = pProductId OR pProductId IS NULL)
AND (ReferenceOrderID = pOrderId OR pOrderId IS NULL)
AND (TransactionType = pTransactionType OR pTransactionType IS NULL)

这很快(请忽略错误的查询和注入)

vSql := 'SELECT ProductID, ProductName FROM TransactionHistory WHERE 1=1 '

IF pProductId IS NOT NULL THEN
    vSql := vSql || ' AND ProductID = ' || pProductId
END IF;

IF pOrderId IS NOT NULL THEN
    vSql := vSql || ' AND ReferenceOrderID = ' || pOrderId
END IF;

IF pTransactionType IS NOT NULL THEN
    vSql := vSql || ' AND TransactionType = ' || pTransactionType
END IF;

OPEN pCursor FOR vSql;

我目前正在研发10g,但很快就会转向11g。使用11g,有没有办法让查询在没有动态查询的情况下快速运行?

0 个答案:

没有答案