我使用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秒),有没有机会加速它?
答案 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
订购一个非常大的结果集。可能很难获得良好的表现。