mysql添加联合索引之后排序发生变化。
create table sys_follow(
id bigint UNSIGNED primary key,
biz_id BIGINT UNSIGNED not null,
status TINYINT(4) DEFAULT 0,
creation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
insert into sys_follow(id,biz_id,status) VALUES(1,21,1)
insert into sys_follow(id,biz_id,status, creation_time) VALUES(2,21,0, '2024-10-21 11:11:11')
select * from sys_follow where biz_id = 21;
在未创建索引的情况下,是按照id升序排列。
create index idx_biz_id_status on sys_follow(biz_id,status);
select * from sys_follow where biz_id = 21;
在创建完这条索引之后,将会按照 id 降序排列。除非手动指定 order by id asc .
请问这是什么原因导致的呢?
找不到具体原因。
创建了联合索引 idx_biz_id_status 后,MySQL 优化器会选择使用这个索引来加速查询。由于索引是按照 biz_id 和 status 排序的,查询结果会受到索引顺序的影响。
在 MySQL 中,添加索引后查询结果的排序发生变化,这并不是因为索引本身改变了数据的物理存储顺序,而是因为查询优化器选择了不同的执行计划。
未添加索引时的查询:
ORDER BY
子句,MySQL 不保证查询结果的排序。尽管在某些情况下(如主键顺序插入的数据),结果可能看起来是按某种顺序排列的,但这只是巧合,不应作为依赖。ORDER BY
子句,结果按 id
升序排列可能只是数据插入顺序的反映。添加索引后的查询:
idx_biz_id_status
索引后,MySQL 优化器可能会选择使用这个索引来加速查询。idx_biz_id_status
是按 (biz_id, status)
排序的。因此,使用此索引检索到的数据将按 biz_id
和 status
的顺序排列。id
列,MySQL 在使用索引检索到数据后,可能会以任何它认为高效的方式返回结果集。这通常意味着结果集不会按 id
排序,除非明确指定了 ORDER BY
子句。id
降序排列,这很可能是 MySQL 在处理索引和数据检索时的内部机制导致的。然而,这种排序是不稳定的,可能会因数据变化或查询优化器的决策而改变。ORDER BY
的查询结果的排序。如果希望结果按特定顺序排列,应始终使用 ORDER BY
子句。在你的例子中,如果希望结果按 id
升序排列,应添加 ORDER BY id ASC
子句到查询中。
问题内容: 每个表(表1和表2)都有其自己的DATETIME字段。 我正在尝试捕获两个表的ID,并按其DATETIME字段对其进行排序。 例子: 我的输出未通过以下查询正确排序: 所需数据: 来自表2 id:2、1, 来自表1 id:3、2、1 因此:2、1、3、2、1 ////编辑 对于可能会遇到冗长而复杂的MySQL请求的人们,请在PhpmyAdmin中尝试一下!它会告诉您错误! ////编辑
本文向大家介绍MySQL联合索引用法示例,包括了MySQL联合索引用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了MySQL联合索引。分享给大家供大家参考,具体如下: 员工表 userid 部门表 deptid 员工部门表 条件:一个员工可以对应多个部门 问题:怎么样设置数据库,让其不能重复添加 userid 和deptid? uuid userid deptid 111 212
本文向大家介绍MySQL索引之主键索引,包括了MySQL索引之主键索引的使用技巧和注意事项,需要的朋友参考一下 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没
本文向大家介绍Mysql之组合索引方法详解,包括了Mysql之组合索引方法详解的使用技巧和注意事项,需要的朋友参考一下 对于任何DBMS,索引都是进行优化的最主要的因素。对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降。 如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找。例如: 假设存在组合索引(c1,c2),
本文向大家介绍SQL 排序索引,包括了SQL 排序索引的使用技巧和注意事项,需要的朋友参考一下 示例 如果您使用按检索方式排序的索引,则该SELECT语句在检索时不会进行其他排序。 执行查询时 数据库系统不会执行其他排序,因为它可以按该顺序进行索引查找。
主要内容:1 独立的列,2 前缀索引和索引选择性,3 多列(组合、联合)索引,3.1 多个单列索引的问题,3.2 使用多列索引,4 选择适合的索引列顺序,5 聚簇(聚集)索引,6 覆盖索引详细介绍了各种高性能的索引使用策略,比如联合索引、索引顺序、聚簇索引、覆盖索引等等,以及常见索引失效的情况。 前面我们已经介绍了各种类型的索引结构及其对应的优缺点: BTREE索引的数据结构以及具体实现原理深入解析 哈希索引的数据结构以及索引的优缺点 正确的创建和使用索引是实现高性能查询的基础。我们通常会看到一
我正在使用Spring Boot webflow和Spring data reactive mongob。我有一个用@Document注释的用户类,它实现了User细节。问题是我有一个带有@Indux(唯一=true)的字段。当应用程序启动时,即使在数据库上创建索引,它也会抛出下面的错误。 以下是课程: 错误: 谢谢你的帮助。
问题内容: 如果排序列上有索引,排序是否使用mysql索引?索引还用于其他什么用途? 它对列的组合索引和单独索引有什么区别? 问题答案: 是的,当按排序列排序时,MySQL使用索引对信息进行排序。 另外,如果在添加到 SELECT 子句的所有列中都有索引,则MySQL不会从表本身加载数据,而是从索引加载数据(更快)。 合并和单独的索引之间的区别是,MySQL不能使用超过 一个 每次查询索引,因此,