首页 > 试题广场 >

以下MySQL查询的执行计划中出现了"Using files

[单选题]
以下MySQL查询的执行计划中出现了"Using filesort":
EXPLAIN SELECT * FROM products
WHERE category_id = 5
ORDER BY price DESC, stock ASC
LIMIT 10;
假设有索引idx_cat_price(category_id, price),以下哪种方式可以消除filesort?
  • 创建索引idx_cat_price_stock(category_id, price DESC, stock ASC)
  • 将查询改为ORDER BY price ASC, stock ASC
  • 将LIMIT 10改为LIMIT 1
  • 在price列和stock列上分别创建单列索引
  • 针对filesort: 表示mysql无法利用索引完成排序,必须依靠内存中额外的排序算法
出现原因:
无索引排序->对没有建立索引的字段进行order by
索引顺序不匹配: 比如有复合索引(a,b), 但是order by b,就会触发
混合排序方向: order by a desc,b aesc
优化方式: 只对建立了索引的字段进行排序
建立复合索引: 对 where a=1 order by b的语句可以建立复合索引(a,b)
遵循最左前缀索引原则
对混合排序创建与排序方向一致的索引:
当ORDER BY涉及多列且排序方向不同时(price DESC, stock ASC),需要创建与排序方向完全匹配的索引才能避免filesort。选项A创建了(category_id, price DESC, stock ASC)索引,完全匹配WHERE和ORDER BY条件,可以避免filesort。
发表于 2026-03-25 13:11:46 回复(0)