我在让 MySQL 将 INDEX() 放在正确的字段上时遇到了一些麻烦。例如,我有一个查询看起来像这样:
SELECT m.id as mid,p.id as pid,po.* FROM m
LEFT OUTER JOIN p ON p.mid = m.id AND p.uid = 2
LEFT OUTER JOIN po ON po.mid = m.id AND po.uid = 2
ORDER BY m.date,m.time
我有以下索引:
- 日期
- 时间
- p.mid
- p.uid
- po.mid
- po.uid
但是,当我运行EXPLAIN
查询时,没有任何键被拾取。我试图放入FORCE INDEX
语句,但 MySQL 一直拒绝它们(说查询中有语法错误)。有任何想法吗?
编辑
这是EXPLAIN
:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE m ALL NULL NULL NULL NULL 31 Using filesort
1 SIMPLE p ref mid,uid mid 5 db.m.id 1
1 SIMPLE po ref uid,mid uid 5 const 1
请注意, p 和 po 现在处理得很好,但 m 仍然没有。我刚刚为 m 添加了一个 INDEX(date, time),结果还是一样。