gpt4 book ai didi

mysql - 当排序字段的数据重复时,MySql如何对数据进行排序?

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:58 24 4
gpt4 key购买 nike

排序字段数据重复时MySql如何排序?

表格:

CREATE TABLE `orderby_test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`sort1` bigint(20) NOT NULL,
`sort2` bigint(20) NOT NULL,
`a` bigint(20) NOT NULL ,
`b` bigint(20) NOT NULL ,
PRIMARY KEY (`id`),
KEY `idx_sort` (`sort1`, `sort2`)
) ENGINE=InnoDB AUTO_INCREMENT=1;

sql :

select id, sort1,sort2,a,b from  orderby_test where sort1 = 1 and a = 1 and b = 1 order by sort2 desc limit 0, 1000

然后插入数据3次:

    insert into orderby_test (sort1,sort2,a,b) values (1,3,1,1);

然后选择,结果是:

id  sort1   sort2   a   b
1 1 3 1 1
2 1 3 1 1
3 1 3 1 1

id是ASC

然后插入数据20次:

    insert into orderby_test (sort1,sort2,a,b) values (1,3,1,1);

然后选择,结果是:

id  sort1   sort2   a   b
12 1 3 1 1
23 1 3 1 1
22 1 3 1 1
21 1 3 1 1
20 1 3 1 1
19 1 3 1 1
18 1 3 1 1
17 1 3 1 1
16 1 3 1 1
15 1 3 1 1
14 1 3 1 1
13 1 3 1 1
1 1 3 1 1
11 1 3 1 1
10 1 3 1 1
9 1 3 1 1
8 1 3 1 1
7 1 3 1 1
6 1 3 1 1
5 1 3 1 1
4 1 3 1 1
3 1 3 1 1
2 1 3 1 1

id没有排序!

为什么?


如果你做更多的插入

结果:

select id, sort1,sort2,a,b from  orderby_test where sort1 = 1 and a = 1 and b = 1 order by sort2 desc limit 0, 20
id  sort1   sort2   a   b
282 1 3 1 1
281 1 3 1 1
280 1 3 1 1
279 1 3 1 1
278 1 3 1 1
277 1 3 1 1
276 1 3 1 1
275 1 3 1 1
274 1 3 1 1
273 1 3 1 1
272 1 3 1 1
271 1 3 1 1
270 1 3 1 1
269 1 3 1 1
268 1 3 1 1
267 1 3 1 1
266 1 3 1 1
265 1 3 1 1
259 1 3 1 1
258 1 3 1 1

id再次排序!

因为innodb中B+树的实现? mysql是怎么做到的?

mysql 版本:5.7.21-21-log

最佳答案

How does MySql sort data when the data of the sort filed is duplicate?

不是。

一旦 MySQL 有足够的信息以符合 ORDER BY 子句的方式排列结果集,它就会尽可能快地打包带关系的行,而不关心所有关于它的相对顺序。

这不是 MySQL 特有的,它是 SQL 设计的行为方式。排序是有成本的(时间、CPU、内存……);当不需要排序时,支付这样的成本是没有意义的。

关于mysql - 当排序字段的数据重复时,MySql如何对数据进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58750219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com