【发布时间】:2013-12-02 16:01:10
【问题描述】:
我有两张桌子,一张举办一年中任何时候都可能发生的活动,另一张则将这些活动与学年联系起来。我可以检索相应的学年,但事件表上的多部分索引似乎没有过滤数据集。
我已经尝试了这两种方法,以及翻转连接表的顺序(以防 MySQL 的从左到右索引使用开始发挥作用),但变化没有任何区别。
SELECT y.school_year FROM events e, years y WHERE e.yid = y.id AND e.year = y.year GROUP BY y.school_year ORDER BY y.school_year DESC
SELECT DISTINCT y.school_year FROM events e, years y WHERE e.yid = y.id AND e.year = y.year ORDER BY y.school_year DESC
解释输出:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE e index meet_year meet_year 9 NULL 486200 使用索引;使用临时的;使用文件排序 1 SIMPLE y eq_ref PRIMARY PRIMARY 8 e.yid,e.year 1这是包含 486,200 行的事件表上的相关索引:
键名类型基数字段 event_year INDEX 978 yid,年份不应该 EXPLAIN 显示 978 行,而不是全部 486,200?该查询需要半秒才能执行,这似乎太慢了。
【问题讨论】:
标签: mysql