前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一招让MySQL排序order by id索引失效

一招让MySQL排序order by id索引失效

原创
作者头像
贺春旸的技术博客
发布2023-12-25 14:21:37
2060
发布2023-12-25 14:21:37
举报
文章被收录于专栏:DBA 平台和工具DBA 平台和工具

测试用例

代码语言:sql
复制
CREATE TABLE `sbtest1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `idx_pad` (`pad`),
  KEY `idx_k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=10005349 DEFAULT CHARSET=utf8 MAX_ROWS=1000000

复现

代码语言:javascript
复制
set optimizer_switch = 'prefer_ordering_index=off';

order by id主键失效,全表扫描

代码语言:javascript
复制
set optimizer_switch = 'prefer_ordering_index=on';

开启后,顺利用到主键索引。

原理

参数optimizer_switch = 'prefer_ordering_index=on'

如果查询中包含 ORDER BY 或 GROUP BY 和 LIMIT 子句,优化器优先会选择有序索引(主键)。

如果将其关闭,MySQL 不会扫描 SELECT ... FROM t ORDER BY pk_col LIMIT n 的主键,而是进行全表扫描和排序。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试用例
  • 复现
  • 原理
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com