내가 AGG_MENTION, LOCATIONDM, CITYDM 테이블에서 40000 ~ 50000 레코드가와 쿼리를 최적화 인덱스
SELECT aggsm.topicdm_id AS topid,citydm.city_name
FROM AGG_MENTION AS aggsm
JOIN LOCATIONDM AS locdm ON aggsm.locationdm_id = locdm.locationdm_id
JOIN CITY AS citydm ON locdm.city_id = citydm.city_id
JOIN STATE AS statedm ON citydm.state_id = statedm.state_id
JOIN COUNTRY AS cntrydm ON statedm.country_id = cntrydm.country_id
WHERE cntrydm.country_id IN (1,2,3,4)
GROUP BY aggsm.topicdm_id,aggsm.locationdm_id
LIMIT 0,200000
테이블에서 40000 개 레코드를 1.6 초 복용 MySQL의 쿼리 .... 500records STATEDM에서 ABD 4 개 기록 표. 내가 거기 열 성능 .... 다음을 향상시킬 수있는 쿼리 나 인덱스를 최적화 할 수있는 방법을 1.6 sec..Is 복용 쿼리 이상 실행하면 EXPLAIN 출력 :
1 SIMPLE aggsm index agg_sm_locdm_fk_idx agg_sm_datedm_fk_idx 4 36313 Using index; Using temporary; Using filesort
1 SIMPLE locdm eq_ref PRIMARY,city_id_UNIQUE,locationdm_id_UNIQUE,loc_city_fk_idx PRIMARY 8 opinionleaders.aggsm.locationdm_id 1
1 SIMPLE citydm eq_ref PRIMARY,city_id_UNIQUE,city_state_fk_idx PRIMARY 8 opinionleaders.locdm.city_id 1
1 SIMPLE statedm eq_ref PRIMARY,state_id_UNIQUE,state_country_fk_idx PRIMARY 8 opinionleaders.citydm.state_id 1 Using where
1 SIMPLE cntrydm eq_ref PRIMARY,country_id_UNIQUE PRIMARY 8 opinionleaders.statedm.country_id 1 Using index
감사 DRapp. 좋은 나를 위해 학습 ...하지만 난 임시 filesort를 사용하는 위의 쿼리 ... statedm에 EXPLAIN 실행할 때 나는 질문 .... ... 어떻게 우리의 ... – Sarath
@Sarath 제거 할 수있다, 첫 번째 위치에있는 단지 (country_ID)에 대한 그 인덱스, 또는 적어도 country_id을해야합니까? 내가 열 순서가 가장 가까운 쿼리의 기준이 일치하는 것으로 나타났습니다하면보다 효율적으로 최적화 할 수 있습니다. – DRapp
I는 제 위치에 country_id 인덱스 .. 1 SIMPLE \t \t \t statedm 인덱스 \t PRIMARY, state_id_UNIQUE, state_country_fk_idx가 어디에 사용 state_country_fk_idx \t \t \t \t 8 69 \t을 country_idx; 색인 사용; 임시 사용; 인덱스에 확인 filesort – Sarath