有索引不用,优化器不是在偷懒
建了 cb(c, b),WHERE c = 1 ORDER BY b 还是 Using filesort:
EXPLAIN SELECT * FROM geek WHERE c = 1 ORDER BY b;
-- key: c Extra: Using filesort
EXPLAIN SELECT * FROM geek FORCE INDEX (cb) WHERE c = 1 ORDER BY b;
-- key: cb Extra: NULL优化器按成本估算:表只有几行、全在一页里,读一页再在内存里排一下,比走 cb 再逐行回表还便宜。数据多了排序变贵,它自然会选 cb。
FORCE INDEX 很适合用来验证「是不是选错了索引」,但别随手写进业务 SQL,数据分布一变它就可能变成负优化。
顺带:Using filesort 只是说没借上索引的顺序、额外排了一次序,数据量小时在内存里排,不一定真用了文件。