그래서이 쿼리가 있다고 가정 : 표 1에 ID에 대한 인덱스가있는 경우자기 참조에 대한 쿼리 속도를하는 방법이
가SELECT * FROM table1 A, table1 B where A.id = B.id;
도, 여전히 전체 테이블을 스캔 할 것을 ...입니다 전체 테이블을 검사하지 않도록 속도를 높이는 방법이 있습니까?
그래서이 쿼리가 있다고 가정 : 표 1에 ID에 대한 인덱스가있는 경우자기 참조에 대한 쿼리 속도를하는 방법이
가SELECT * FROM table1 A, table1 B where A.id = B.id;
도, 여전히 전체 테이블을 스캔 할 것을 ...입니다 전체 테이블을 검사하지 않도록 속도를 높이는 방법이 있습니까?
실행 계획이 내 앞에 있지 않지만 실제로는 TableA
만 스캔하는 것이므로 그 이유는 TableA
에 다른 조건이 없기 때문입니다. 지금은 통계이기 때문에 이번에 TableB
을 찾아야합니다. 이제 TableA
에 대해 다른 조건을 제공하고 해당 조건이 색인을 충족 시키면 전체 표를 검색하지 않는 것입니다.
TableA
의 인덱스가 쿼리의 커버 된 인덱스 인 경우 실제로는 심지어 TableA
의 데이터 페이지도 읽지 않습니다.
TableA
과 TableB
사이에 외래 키 제약 조건이 있고 id 필드보다 TableB
에서 더 이상 읽지 않은 경우 데이터 페이지를 읽지 않을 것입니다.
TableB
의 데이터가 필요하더라도 해당 데이터가 색인에 있다면 데이터 페이지를 읽을 필요가 없습니다.
하지만 마지막으로 *
을 선택 했으므로 두 테이블 모두 모두의 모든 열을 선택하기 때문에 매우 효율적인 쿼리가 될 것 같지 않습니다.
너무 길지 않았 으면 좋겠지 만, 내가 어디에서 왔는지 알고 싶었습니다.
테이블의 모든 레코드가 기준을 충족하므로 전체 테이블을 스캔합니다. 나는 이것이 당신의 실제 문제의 단순화라고 생각하지만, 당신이 너무 단순 해졌고 더 이상 좋은 표현이 아닌 것 같아요. – invertedSpear
"table1에 id에 대한 색인이 있어도 여전히 전체 표를 검색합니다 ..."--- 예, 'table1'에서 모든 항목을 선택했기 때문입니다. "전체 테이블을 스캔하지 않도록 속도를 향상시키는 방법이 있습니까?"--- "where where where"를 추가하십시오. – zerkms
"id"가 NULL입니까? 이것이 필터 역할을하는 경우입니다. –