如何避免在sql中进行全表扫描

时间:2014-04-16 13:33:12

标签: sql db2

    SELECT 
      DISTINCT P.IDENTIFICATIONNUM IDNUMBER, 
      P.NAME NAME, 
      P.NATIONALITY NATIONALITY, 
      O.NAME COMPANY
    FROM APPLICANT_TB P
    LEFT JOIN APP_TB A ON A.APPLICANTID=P.APPLICANTID
    LEFT JOIN ORGANISATION_TB O ON O.ORGID = A.ORGID

作为sql代码显示,我正在使用IBM DB2,并根据解释计划,所有3个表都是全表扫描。有人告诉我如何避免这种情况? (所有PK使用都被编入索引)

2 个答案:

答案 0 :(得分:3)

对所需记录更具选择性。包含WHERE子句。

答案 1 :(得分:0)

由于您选择了所有行,因此最有效的方法是将表格扫描返回给您。

即使您添加了过滤器,您仍然可以进行表扫描,这取决于索引与您要过滤的列的匹配程度,以及数据库统计信息的最新状态。

通常,查询优化器会根据您的过滤器猜测所需表格的百分比。一旦该百分比超过表格的某个(令人惊讶的小,如20%)部分,它将选择一个表格扫描作为"最佳"获取您要求的数据的方法。