[英]How to avoid full table scan in sql
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使用都被編入索引)
對所需記錄更具選擇性。 包含WHERE子句。
由於您選擇了所有行,因此最有效的方法是將這些行返回給您進行表掃描。
即使您添加過濾器,您仍然可以進行表掃描,這取決於索引與要過濾的列的匹配程度,以及數據庫統計信息的最新狀態。
通常,查詢優化器會根據您的過濾器猜測所需表的百分比。 一旦該百分比超過表格的某個(令人驚訝的小,如20%)部分,它將選擇表格掃描作為獲取您要求的數據的“最佳”方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.