MySQL查询优化器参数prefer_ordering_index有什么作用?

2026-05-23 09:2344阅读0评论SEO优化
  • 内容介绍
  • 文章标签
  • 相关推荐

一句话。 哎呀, 今天要跟你聊聊这个叫prefer_ordering_index的参数,别看它名字很长,其实就是让MySQL在做排序的时候更偏爱用索引的一个小把戏。你以为这玩意儿就那么简单?不不不我可得把它拆开来好好说说。

先给你来个“开场白”

你想想看, 写个SQL: SELECT * FROM orders WHERE status='shipped' ORDER BY create_time DESC LIMIT 10; 如果没有优化器帮忙, ICU你。 MySQL可能会先把所有满足status=‘shipped’的行找出来然后再排个序。这里面就有两件事: - 扫索引 - 排序

数据库实战:MySQL查询优化器参数 prefer_ordering_index介绍

prefer_ordering_index这个参数, 就是告诉优化器:“嘿,优先考虑能直接按顺序读出来的索引。”如果你把它打开, 优化器就会尽量去找能支持ORDER BY字段的索引;如果你关掉,它会更关注WHERE条件的选择性,用最少扫描的数据来先过滤,再排序。

为什么这么重要?

主要原因是在实际业务里经常会遇到“高过滤性+排序”的场景。比如电商平台上要分页显示已发货订单,或者日志系统要统计最近7天每个IP登录次数。这种场景里 如果优化器只顾着用排序索引,就可能扫描大量不必要的数据;反之,如果只顾过滤,则可能多次回表导致IO浪费。于是就出现了一个平衡点——我们可以通过调节prefer_ordering_index来决定到底优先哪一面,一言难尽。。

阅读全文

一句话。 哎呀, 今天要跟你聊聊这个叫prefer_ordering_index的参数,别看它名字很长,其实就是让MySQL在做排序的时候更偏爱用索引的一个小把戏。你以为这玩意儿就那么简单?不不不我可得把它拆开来好好说说。

先给你来个“开场白”

你想想看, 写个SQL: SELECT * FROM orders WHERE status='shipped' ORDER BY create_time DESC LIMIT 10; 如果没有优化器帮忙, ICU你。 MySQL可能会先把所有满足status=‘shipped’的行找出来然后再排个序。这里面就有两件事: - 扫索引 - 排序

数据库实战:MySQL查询优化器参数 prefer_ordering_index介绍

prefer_ordering_index这个参数, 就是告诉优化器:“嘿,优先考虑能直接按顺序读出来的索引。”如果你把它打开, 优化器就会尽量去找能支持ORDER BY字段的索引;如果你关掉,它会更关注WHERE条件的选择性,用最少扫描的数据来先过滤,再排序。

为什么这么重要?

主要原因是在实际业务里经常会遇到“高过滤性+排序”的场景。比如电商平台上要分页显示已发货订单,或者日志系统要统计最近7天每个IP登录次数。这种场景里 如果优化器只顾着用排序索引,就可能扫描大量不必要的数据;反之,如果只顾过滤,则可能多次回表导致IO浪费。于是就出现了一个平衡点——我们可以通过调节prefer_ordering_index来决定到底优先哪一面,一言难尽。。

阅读全文