두 테이블 중 하나는 등급에 ID를 일치시키고 그 중 하나는 약 15 열에 실제 데이터가있는 ID를가집니다. 데이터 테이블에서 id 열에는 인덱스가 있고 등급 테이블에는 id가 기본 키이며 등급이 인덱싱됩니다. 긍정적 인 평가를받은 행에서만 데이터를 선택하고 싶습니다. 그래서 쿼리MYSQL 더 빠른 쿼리가 필요합니다
SELECT * FROM data_table
INNER JOIN rating_table ON data_table.id = rating_table.id
WHERE rating > 0
하지만 어떤 이유로이 나에게 긴 매우 보인다 약 0.35 초 걸리는을 사용하고해야 할 일. 데이터 테이블에는 약 90,000 개의 행이 있고 등급 테이블에는 약 5,000 개의 행이 있습니다.이 작업은 10 분의 1 초보다 훨씬 짧아야합니다 ...이 작업을 빠르게 수행하려면 어떻게 다르게 인덱싱하거나 다르게 쿼리 할 수 있습니까?
편집 : 프로파일 링 후 프로파일 링을 통해 다음과 같은 결과를 얻었습니다. 내가 쿼리가 다시 훨씬 빠르게 이전보다하지만, 그럼에도 불구하고이
0.000012 starting
0.000053 checking query cache for query
0.000014 Opening tables
0.000006 System lock
0.000027 Table lock
0.000044 init
0.000018 optimizing
0.000060 statistics
0.000016 preparing
0.000004 executing
0.004916 Sending data
0.000007 end
0.000003 query end
0.002271 freeing items
0.000009 storing result in query cache
0.000002 logging slow query
0.000004 cleaning up
그래서 나는 많은 시간이 데이터 전송에 소요 된 볼 사람에게 유용 할 수 있습니다 온 있도록 캐시이라고 생각합니다 ... 어떻게 나는이 부분을 빠르게 할까?
세 가지 질문 : 1) 동일한 데이터 유형의'data_table.id'와'rating_table.id'입니까? 2)'id' 필드를 인덱싱하는 것 외에'rating'도 인덱싱 했습니까? 3) 지속 시간이 다른 것 (예 : 클라이언트로 데이터를 보내는 것)으로 인해 발생하지 않는지 알아 내기 위해 명세서를 프로파일 링 했습니까? – Bjoern
색인 만들기. 쿼리 응답 시간이 크게 향상됩니다. –
네 등급에 이미 색인이 있고 두 테이블의 ID가 동일한 데이터 유형으로되어 있다고 대답했습니다. 나는 PHP mysadmin에서 지금 실행하고 있으므로 실제로 mysql에서 시간을 보낸다. 또한 쿼리 계획에서 무엇을 의미합니까? – hackartist