MySQL 8.0 中 SELECT 时的默认排序列

在MySQL 8.0中,无明确排序条件的SELECT查询可能不会按主键顺序返回结果。以InnoDB为例,数据在ibd文件中按主键存储,但查询可能依据唯一索引排序。当查询选择唯一索引且能直接获取所有数据时,不走回表操作。如果进行全表扫描,则可能按主键排序。因此,为确保排序结果,建议在SQL语句中显式指定排序字段和方式。
摘要由CSDN通过智能技术生成

SELECT时如果没有显式的添加ORDER BY条件, MySQL会按什么顺序返回结果呢?

是按 PK 再 UNIQUE INDEX 的顺序吗?

那可不一定哦!

环境: win10 + MySQL 8.0.27

这里只讨论 InnoDB, 如果你想看 MyISAM, 请自行研究

来看一个实际发生的例子。我们建一个省份的表(省份名称唯一),然后存入几个省份名称(这里用的加拿大的),完整代码如下:

USE `test`;
CREATE TABLE `provinces`(
    `province_id` smallint NOT NULL AUTO_INCREMENT COMMENT '省份id',
    `province_name` varchar(50) NOT NULL COMMENT '省份, 必须唯一',
    PRIMARY KEY(`province_id`)
) ENGINE=InnoDB;

-- 添加唯一索引
ALTER TABLE `provinces`
ADD UNIQUE INDEX `UK_provinceName`(`province_name`);

-- 填充测试数据
INSERT INTO `provinces`(`province_name`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值