三张表,各在千万数量级。关键字段都已经建好索引。现在用相同的查询条件查询各个表,每个表都返回一个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左右。谢谢。

解决方案 »

  1.   

    plsql developer--新建SQL窗口--输入SQL语句--F5,把结果贴出来看看
      

  2.   

    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就可以了