나는 여러 테이블을 가지고 있고 그것들에 합류해야합니다. 테이블 중 하나에 200,000 개의 레코드가 있습니다 (이것은 학생 테이블입니다). 또 다른 사람은 1m 이상의 기록을 가지고 있습니다.MySQL이 가능합니다. 너무 많은 시간이 걸리는 필터
학생 입학 연도별로 필터링해야합니다. 이 시나리오에서는 입학 연도가 학생 ID의 처음 두 자리로 주어집니다. 학생 ID는 6 자리 숫자입니다.
예를 들어: - 1997 년에서 학생들은 ID가 97XXXX - 2011 년 학생들이 그래서, 그 필드을
ID를 B1XXXX - 2005 년에서 학생들은 ID A5XXXX 이 나는 LIKE 문을 사용한다. 올해 1997 년
학생들을 위해
SELECT * FROM STUDENT WHERE id LIKE '97%'
... 그것은이 쿼리 시간의 끔찍한 양을하고 있음을 밝혀졌습니다. 이는 해당 특정 테이블에 대한 EXPLAIN 출력된다
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
--------------------------------------------------------------------------------------------+
| 1 | SIMPLE | STUDENTS | range | ID | ID | 11 | NULL| 6505 | Using where; Using index; Using temporary; Using filesort |
가 변형 또는 숫자 값으로 올해로 DB에 여분의 열을 추가 정당한가요? 쿼리가 훨씬 빨라질까요?
고맙습니다.
그것은 당신이 인덱스의 경우 새 필드 더 빠르게 실행됩니다. 우리 중 누구도 그것이 합법적인지 아닌지 말할 수있는 입장에 있지 않습니다. 당신은 요구 사항을 아는 사람입니다. –
테이블과 인덱스의 정의는 무엇입니까? 쿼리 란 무엇입니까? 쿼리 계획은 어떻게 생겼습니까? – gillyspy
쿼리 계획에서 EXPLAIN을 의미합니까? – Dynelight