【发布时间】:2017-03-02 04:13:00
【问题描述】:
我正在尝试改进查询。我打开了一个票证数据集。每张票都有不同的行,每一行表示票的更新。有一个字段 (dt_update) 每行都不同。
我在 st_remedy_full_light 中有这个索引。
IDX_ASSIGNMENT(分配)
IDX_REMEDY_INC_ID (REMEDY_INC_ID)
IDX_REMDULL_LIGHT_DTUPD (DT_UPDATE)
现在,查询在 8 秒内执行。对我来说很高。
WITH last_ticket AS
( SELECT *
FROM st_remedy_full_light a
WHERE a.dt_update IN
( SELECT MAX(dt_update)
FROM st_remedy_full_light
WHERE remedy_inc_id = a.remedy_inc_id
)
)
SELECT remedy_inc_id, ASSIGNMENT FROM last_ticket
附:这只是一个大查询的一部分
附加信息: - st_remedy_full_light 表包含 529.507 行
【问题讨论】:
-
可以是多个 'st_remedy_full_light',每个 'remedy_inc_id' 具有相同的 'dt_update'?
-
如果您不想/不能将子查询更改为 Tony安德鲁斯建议。 IE。包含多列的单个索引,而不是每列的索引 - Oracle 将只能使用其中一个单列索引进行查询,即使您在您的询问。这样的索引可能也会对 Tony Andrew 的建议查询有所帮助。
-
@EvgeniyK。不仅remediate_inc_id 有更多的dt_update,而另一个没有。
-
@Boneist 我没想过要使用多个索引。使用 (remedy_inc_id, dt_update, assignment) 可以更好地工作。但奇怪的是,它仅使用索引来获取 select 中的字段,而不是用于子查询中的 where 条件
标签: oracle performance database-performance