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使用都被编入索引)
答案 0 :(得分:3)
对所需记录更具选择性。包含WHERE子句。
答案 1 :(得分:0)
由于您选择了所有行,因此最有效的方法是将表格扫描返回给您。
即使您添加了过滤器,您仍然可以进行表扫描,这取决于索引与您要过滤的列的匹配程度,以及数据库统计信息的最新状态。
通常,查询优化器会根据您的过滤器猜测所需表格的百分比。一旦该百分比超过表格的某个(令人惊讶的小,如20%)部分,它将选择一个表格扫描作为"最佳"获取您要求的数据的方法。