中国开发网: 论坛: 程序员情感CBD: 贴子 299053
dead_lee: 技术帖,请教一段SQL
有这么一段SQL,用户反映速度很慢,我看了下执行计划,asc_send_form_detail和asc_contract_detail都是全表扫描。
SELECT m.send_form_id, e.material_code item_code, e.materiel_name item_name,
'' bom_revision, '' unit_code,
'34CP' subinventory, '' tosubinventory, d.COUNT current_qty,
m.send_form_id delivery_header_id
FROM mas_admin.asc_send_form_detail m INNER JOIN mas_admin.asc_send_form asf ON asf.send_form_id =
m.send_form_id
INNER JOIN mas_admin.asc_contract_detail d ON d.contract_detail_id =
m.contract_detail_id
INNER JOIN mas_admin.asc_materiel e ON e.materiel_id =
d.fact_material_id
WHERE asf.send_form_state_id IN (1, 2, 3)


我修改成这样的时候,只有asc_send_form_detail是全表扫描,不幸的是,这个表的记录是最多的,所以性能还是不好,有没有什么解决办法,相关字段都有索引。
SELECT m.send_form_id, dd.material_code item_code, dd.materiel_name item_name,
'' bom_revision, '' unit_code, '34CP' subinventory, '' tosubinventory, dd.COUNT current_qty,
m.send_form_id delivery_header_id
FROM mas_admin.asc_send_form_detail m INNER JOIN mas_admin.asc_send_form asf ON asf.send_form_id =
m.send_form_id
INNER JOIN (SELECT *
FROM mas_admin.asc_materiel e INNER JOIN mas_admin.asc_contract_detail d ON e.materiel_id =
d.fact_material_id
WHERE e.material_code = '035030100082') dd ON dd.contract_detail_id =
m.contract_detail_id
WHERE asf.send_form_state_id IN (1, 2, 3)

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录