求一条多表联查SQL语句的优化。
CSDN的朋友们,大家好!
我在工作中遇到一个问题,恳求大家的帮助。
先说说表的情况。我有个查询,涉及到这几个表格:
1)patient 表, 记录共 707832 条。
2)case_event 表, 记录共 2975352 条。
3)case_main 表, 记录共 2975056 条。
4)orders 表, 记录共 3043243 条。
我有一个几个表联查的语句。是这样的:
SELECT pa_nhi FROM patient WHERE pa_pno IN (SELECT cs_pno FROM case_main WHERE cs_serial IN (SELECT ce_cs_serial FROM case_event WHERE ce_serial IN (SELECT or_event_serial FROM orders WHERE or_accession_no = '809862')));
能达到目的,但是速度上不是很快。根据7次查询平均值(\timing测算出来的)是1494.57ms
根据同事的建议,我把它改成了另外一种写法:
SELECT pa_nhi FROM patient, case_main, case_event, orders WHERE or_event_serial = ce_serial AND ce_cs_serial = cs_serial AND cs_pno = pa_pno AND or_accession_no = '809862';
速度上有所提高,但是并不显著。根据7次查询平均值是1461.86ms
两者相差32.71ms。
现在这几个表格是已经固定的了,从改进表结构的角度,下手比较难。
请问大家,还有没有比较好的建议,针对这种几个表联查的情况,可以显著提高速度的?
恳请大家提些意见,谢谢大家!