三表Full Join,求SQL优化。
三张表,各在千万数量级。关键字段都已经建好索引。
现在用相同的查询条件查询各个表,每个表都返回一个1000条左右的记录,每次查询在1s左右。
两两Full Join查询,每次查询同样返回1000条左右的记录,每次查询在5 ~ 30 s。
现在想三表一起Full Join,每次估计返回的记录也在1000条左右,但速度就慢的没法忍受。
表的结构如下:
表A三个字段 sample_id, gene_id, data_a
表B三个字段 sample_id, gene_id, data_b
表C三个字段 sample_id, gene_id, data_c
其中sample_id, gene_id都已经建好索引。
查询条件是一组gene_id,
我现在的查询语句如下:
SELECT COALESCE(A.SAMPLE_ID, B.SAMPLE_ID, C.SAMPLE_ID) AS SAMPLE_ID,
COALESCE(A.GENE_ID, B.GENE_ID, C.GENE_ID) AS GENE_ID,
A.DATA_A, B.DATA_B, C.DATA_C
FROM A FULL JOIN B ON A.SAMPLE_ID = B.SAMPLE_ID AND A.GENE_ID = B.GENE_ID
FULL JOIN C ON COALESCE(A.SAMPLE_ID, B.SAMPLE_ID) = C.SAMPLE_ID
AND COALESCE(A.GENE_ID, B.GENE_ID) = C.GENE_ID
WHERE GENE_ID IN (317781, 11202);
有没有办法把最终的查询结果控制在5 ~ 10s左右。
谢谢。
------解决方案--------------------给出执行计划
------解决方案--------------------PL工具
------解决方案--------------------plsql developer--新建SQL窗口--输入SQL语句--F5,把结果贴出来看看
------解决方案--------------------SELECT COALESCE(A.SAMPLE_ID, B.SAMPLE_ID, C.SAMPLE_ID) AS SAMPLE_ID,
COALESCE(A.GENE_ID, B.GENE_ID, C.GENE_ID) AS GENE_ID,
A.DATA_A,
B.DATA_B,
C.DATA_C
FROM A
FULL JOIN B
ON A.SAMPLE_ID = B.SAMPLE_ID
AND A.GENE_ID = B.GENE_ID
FULL JOIN C
ON B.SAMPLE_ID = C.SAMPLE_ID
AND B.GENE_ID = C.GENE_ID
WHERE COALESCE(A.GENE_ID, B.GENE_ID, C.GENE_ID) IN (317781, 11202);
这样行不行,试试。条件GENE_ID已经确认了,感觉没必要用FULL JOIN,用JOIN就可以了