【发布时间】:2011-08-11 06:18:39
【问题描述】:
SELECT MAX (tran_date)
FROM abc
WHERE p_id = p_p_id
AND flag = 'Y'
AND ( ( p_c_number IS NULL
AND c_number IS NULL
)
OR (c_number = p_c_number)
)
AND ( ( p_m_number IS NULL
AND m_number IS NULL
)
OR (m_number = p_m_number)
)
AND ( ( p_s_number IS NULL
AND s_number IS NULL
)
OR (s_number = p_s_number)
);
我使用 oracle 作为 RDBMS,我想优化这个查询
- 计划
SELECT STATEMENT ALL_ROWSCost:357 字节:39 基数:1
2 SORT AGGREGATE 字节:39 基数:1
1 表访问全表 abc 成本:357 字节:312 基数:8
【问题讨论】:
-
您是否尝试过使用 RDBMS 的
EXPLAIN或类似命令来查看查询的估计执行计划?围绕这些列中的大多数创建索引可能会有所帮助,查询计划将帮助您查看哪些列。 -
@cdhowie:在 oracle 中检索执行计划比像在 mysql 中那样仅在
EXPLAIN前加 ;-) 但实际上,每个优化都需要从计划检查开始跨度> -
我会把解释计划发给你
-
对,我不是在假装是Oracle专家,只是表示看查询计划比问SO更好。提供问题中的计划肯定会有所帮助。
-
@gaurav - 您可以编辑您的帖子以包含查询计划吗?这样您就可以对其进行格式化,使其更易于阅读。