dai*_*isy 94 mysql mysql-5 index order-by select
假设您有以下表格和数据:
create table t (
k int,
v int,
index k(k)
) engine=memory;
insert into t (k, v)
values (10, 1),
(10, 2),
(10, 3);
Run Code Online (Sandbox Code Playgroud)
发出select * from t where k = 10noorder by子句时,MySQL默认如何对记录进行排序?
Nic*_*mas 108
在 SQL 世界中,顺序不是一组数据的固有属性。因此,除非您使用 ORDER BY 子句查询数据,否则您无法从 RDBMS 获得数据将按特定顺序(甚至以一致顺序)返回的保证。
所以,回答你的问题:
ORDER BY。做任何其他事情都是在为不受欢迎的惊喜做好准备。这是所有 SQL 的属性,而不仅仅是 MySQL。SQL-92 规范中的相关文本是:
如果未指定 <order by 子句>,则 Q 的行的顺序取决于实现。
游标规范中有类似的文本位。
小智 12
到达时插入是无序的、混乱的。创建的索引确实具有将元素插入到作为索引的链表中的适当位置的顺序。考虑一个索引的三重链表,其中有一个从一个索引元素到下一个索引元素的前向移动链接,一个用于遍历和完整性目的的后向链接,然后是一组指向表中实际记录的指针。匹配有问题的索引元素。
实际数据,存储混乱。与数据关联的索引,在存储和构造中排序。数据的实际拉取,有序或无序,取决于所涉及的查询。