0
MySQL查询服用1.6秒40000个记录表优化与查询索引
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
我在AGG_MENTION,LOCATIONDM,CITYDM表40000〜50000的记录.... 500records在STATEDM ABD 4个记录COUNTRY表。 当我上面的查询运行它正在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
Thanks DRapp。对我来说很好的学习......但是我有疑问....当我在上面的查询上运行EXPLAIN时.... ....我正在使用temporary,filesort ...我们怎样才能摆脱那... – Sarath
@Sarath,你是否只有一个索引(Country_ID),或者至少country_id在第一位?我发现最接近匹配查询条件的列的顺序有助于更高效地进行优化。 – DRapp
我有与第一位置COUNTRY_ID索引.. 1个\t \t SIMPLE statedm \t \t索引PRIMARY,state_id_UNIQUE,state_country_fk_idx,country_idx \t \t state_country_fk_idx 8 \t \t \t 69使用其中;使用索引;使用临时;使用filesort – Sarath