내가 가지고있는 다음과 같은 두 개의 테이블 : StudentId
에데이터베이스 인덱스의 원인이 사용하지 않는 슬로우 쿼리
StudentCourse
- Id,
- StudentId,
- CourseId
고유 인덱스와 CourseId
StudentCourseCount
- Id,
- Student1Id,
- Student2Id,
- CourseCount
지수 Student1Id
에와 Student2Id
에 CourseCount
색인 및 CourseCount
내가 CourseId
일 때 나는 코스를 듣는 학생들을 나열합니다. 성취하고자하는 열쇠는 학생이 이전에 수업을 들었던 다른 학생들을 열거하고 싶습니다.
나는 다음과 같은 쿼리를 시도하고있다 :
이SELECT * FROM StudentCourseCount sc
INNER JOIN StudentCourse s1 ON s1.course_id = <id> AND sc.student1_id = s1.student_id
INNER JOIN StudentCourse s2 ON s2.course_id = <id> AND sc.student2_id = s2.student_id
WHERE sc.course_count > 1
이 쿼리가 예상 작품으로을; 그러나, 그것은 매우 큰 테이블 (10,000,000 + 행)에서 매우 느립니다.
쿼리를 설명 할 때 StudentCourseCount
은 인덱스를 사용하지 않습니다. Student1Id
및 Student2Id
에 대해 가능한 인덱스가 있음을 적절히 식별하지만 둘 중 하나를 사용하지는 않습니다.
실행 계획 : 테이블 : SC 가능한 키 : Student1Id, Student2Id 키 : 널 (null) 행 : 28648392
테이블 : C2 키 : student_id 행 : 1 개
테이블 : C1 키 : student_id 행 : 1
첫 번째 표는 분명히 검색 중이며 신속하게 필터링하기 위해 키를 사용하지 않습니다.
실행 계획과 테이블의 인덱스 정의를 복사하십시오. – Olli
난 그냥 궁금해서. . . 어떤 애플리케이션이 'StudentCourse' 테이블에 10,000,000 개의 행을 가지고 있습니까? –
인덱스를 추가하고 쿼리 실행 계획을 설명했습니다 (중요한 부분을 다시 작성하므로 잘 복사/붙여 넣기하지 않았습니다). – endyourif