mysql:试图加速查询

时间:2014-03-03 12:55:16

标签: mysql sql performance

我使用mysql作为DB并且为了在界面中显示某些内容我必须执行此类查询

select site_id
from dim_site join
     dim_site_cat
     using(site_id)
where cat_id=8724
order by update_cat_ids_ts desc
limit 100;
在dim_site中的

我有6.5 M行,其中1.5行有cat_id = 8724。 dim_site_cat是多对多表。我有update_cat_ids_ts的索引,但它并没有像你看到的那样工作。现在由于filesort,这样的查询工作时间太长(8.5秒),有没有机会加速它?

1 个答案:

答案 0 :(得分:0)

如果我正确理解列的来源(你应该总是使用表别名),你似乎不需要dim_site表:

select site_id
from dim_site_cat
where cat_id = 8724
order by update_cat_ids_ts desc
limit 100;

可以使用复合索引加速:dim_site_cat(cat_id, update_cat_ids_ts, site_id)

编辑:

请参阅,您应该使用表别名。也许这会有所帮助:

select site_id
from dim_site s
where exists (select 1
              from dim_site_cat sc
              where sc.site_id = s.site_id and sc.cat_id = 8724
             )
order by s.update_cat_ids_ts desc
limit 100;

对于此查询,请创建以下两个索引:dim_site_cat(site_id, cat_id)dim_site(update_cat_ids_ts, site_id)。但是,您需要为order by订购一个非常大的结果集。可能很难获得良好的表现。