【发布时间】:2018-12-23 06:21:28
【问题描述】:
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;
我在查询上方运行,发现第二个查询与第一个查询相比性能下降。唯一的区别是第二个查询中的附加过滤器 AND PRODUCT_VIEW IN ('PView')。但它在该列上有索引。请让我知道性能下降的原因以及如何检查是否使用了索引?我正在使用 Oracle SQL 开发人员并尝试检查解释计划,但无法获得太多详细信息。
【问题讨论】:
-
你能用
PRODUCT_VIEW = 'PView'代替PRODUCT_VIEW IN ('PView')吗?它会给你更好的表现。另外,你能分享一下你的解释计划吗? -
我必须使用 IN,因为搜索可以使用多个字符串值。我无法在此处上传解释计划的图片。对于第一个查询,我主要看到 2 个部分,