oracle sql 优化
oracle sql optimization
我有这个查询:
SELECT sd.sdt_service_type,
sd.sdt_status,
count(*) col_count
FROM mci_service_data sd
WHERE
sd.sdt_version = 1
AND sd.sdt_type = 'MMSP'
AND sd.sdt_status in (?)
AND(sd.STD_OPERATION_FLAG is null OR sd.STD_OPERATION_FLAG not like 'mark%')
AND sd.sdt_office_id in
(SELECT op.fld_ofs_id
FROM mci_ofs_per op
WHERE op.fld_per_id = ?)
group by sd.sdt_service_type,sd.sdt_status
在 mci_service_data table 上有索引
mci_service_data(sdt_type, sdt_version, sdt_status, sdt_office_id)
和 mci_ofs_per(fld_per_id, fld_ofs_id)
。但是这个查询需要超过 10 秒的时间!
那么,这个查询将如何优化和更快?
对于这个查询,我会推荐以下索引:
mci_service_data(sdt_type, sdt_version, sdt_status, sdt_office_id)
mci_ofs_per(fld_per_id, fld_ofs_id)
我有这个查询:
SELECT sd.sdt_service_type,
sd.sdt_status,
count(*) col_count
FROM mci_service_data sd
WHERE
sd.sdt_version = 1
AND sd.sdt_type = 'MMSP'
AND sd.sdt_status in (?)
AND(sd.STD_OPERATION_FLAG is null OR sd.STD_OPERATION_FLAG not like 'mark%')
AND sd.sdt_office_id in
(SELECT op.fld_ofs_id
FROM mci_ofs_per op
WHERE op.fld_per_id = ?)
group by sd.sdt_service_type,sd.sdt_status
在 mci_service_data table 上有索引
mci_service_data(sdt_type, sdt_version, sdt_status, sdt_office_id)
和 mci_ofs_per(fld_per_id, fld_ofs_id)
。但是这个查询需要超过 10 秒的时间!
那么,这个查询将如何优化和更快?
对于这个查询,我会推荐以下索引:
mci_service_data(sdt_type, sdt_version, sdt_status, sdt_office_id)
mci_ofs_per(fld_per_id, fld_ofs_id)