gpt4 book ai didi

sql - Oracle中如何查看索引是否被使用

转载 作者:行者123 更新时间:2023-12-02 15:23:35 31 4
gpt4 key购买 nike

SELECT * 
FROM (SELECT TEMP.*,
ROWNUM RNUM
FROM (SELECT entry_guid
FROM alertdevtest.ENTRY
WHERE Upper(alert_name) = 'alertname'
AND user_guid = 'AlertProductClientTest'
AND product_code = '-101'
AND status_code != 13) TEMP
WHERE ROWNUM <= 2500)
WHERE rnum >= 0;

SELECT *
FROM (SELECT TEMP.*,
ROWNUM RNUM
FROM (SELECT entry_guid
FROM alertdevtest.ENTRY
WHERE Upper(alert_name) = 'alertname'
AND user_guid = 'AlertProductClientTest'
AND product_code = '-101'
AND status_code != 13
AND product_view IN ( 'PView' )) TEMP
WHERE ROWNUM <= 2500)
WHERE rnum >= 0;

我正在运行上述查询,发现第二个查询与第一个查询相比性能下降。唯一的区别是第二个查询中的附加过滤器和 PRODUCT_VIEW IN ('PView')。但它在该列上有索引。请让我知道性能下降的原因是什么以及如何检查索引是否被使用?我正在使用 Oracle SQL 开发人员并尝试检查解释计划,但无法获得更多详细信息。

最佳答案

在Oracle SQL Developer 中,当工作表中有SQL 时,有一个按钮“Explain Plan”,您也可以按F10。执行完 Explain 计划后,它会显示在 SQL Developer 的底部 View 中。有一列“OBJECT_NAME”,它会告诉你正在使用什么索引。例如,在我刚刚运行的查询中,在左列 (OPERATION) 中,它首先显示“SELECT STATEMENT”,然后是 SORT (AGGREGATE),然后是 INDEX (RANGE SCAN),然后在 OBJECT_NAME 列中显示 TICKER_IDX1,这是我表上索引的名称。

因此您可以通过 OBJECT_NAME 列查看正在使用的索引。

Oracle Cost Based Optimizer 可能会选择次优的执行计划。多次更新统计数据将解决问题。其他选择是添加额外的索引,换句话说,多列索引。您可以提示一条 SQL 语句,但很少需要这样做。此外,还可以重写查询。

关于sql - Oracle中如何查看索引是否被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32692408/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com