【发布时间】:2019-04-30 20:48:55
【问题描述】:
我有一个查询
SELECT r.id
, r.account_id
, r.name
, r.bucket_id
, r.description
, r.development
, r.created_at
, r.priority
FROM realms r
WHERE r.account_id = 3;
我在两个具有相同索引的不同表上运行它,一个结果按r.id 和r.created_at 排序(两种方式都相同),另一个结果按r.name 排序。这怎么可能?
通过 MySQL Workbench 中的表检查器查看,两者的索引都是:
+---------------------------+-------+-----+-----------------+
| key |Type |Uni | Columns |
+ --------------------------+-------+-----+-----------------+
| PRIMARY | BTREE | YES | id |
| realms_account_id_name_UQ | BTREE | YES | account_id,name |
| realms_account_id_IX | BTREE | NO | account_id |
| realms_bucket_id_IX | BTREE | NO | bucket_id |
+---------------------------+-------+-----+-----------------+
我认为是索引决定了输入的顺序,当我在两者之间切换时,屏幕甚至没有闪烁。如果他们两个的主键都是id,为什么一个显示按名称排序的结果?
【问题讨论】:
-
sql表中的行没有内在的顺序,所以这个问题没有意义
-
让我们把“无意义”变成关于使用
ORDER BY并了解索引如何工作的课程。