加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_常德站长网 (https://www.0736zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql默认排序规则

发布时间:2022-09-19 14:54:48 所属栏目:MySql教程 来源:
导读:  今天遇到一个问题,有一个 Select 语句没有加 “Order By”,返回的数据是不确定的。

  这种问题碰到不止几次了。追根寻底, Select 语句如果不加 “Order By”, MySQL会怎么排序呢?
  今天遇到一个问题,有一个 Select 语句没有加 “Order By”,返回的数据是不确定的。
 
  这种问题碰到不止几次了。追根寻底, Select 语句如果不加 “Order By”, MySQL会怎么排序呢?
 
  * 不能依赖 MySQL 的默认排序
 
  * 如果你想排序,总是加上 Order By
 
  * GROUP BY 强加了 Order By (这与标准语法冲突,如果要避免,请使用 ORDER BY NULL)这里我有疑问MySQL 排序,
 
  到底强加了何种 Order by
 
  对于 MyISAM 表
 
  MySQL Select 默认排序是按照物理存储顺序显示的。(不进行额外排序).
 
  也就是说
 
  SELECT * FROM tbl – 会产生“表扫描”。如果表没有删除、替换、更新操作,记录会显示为插入的顺序。
 
  InnoDB 表
 
  同样的情况,会按主键的顺序排列。再次强调,这只是潜规则(artifact of the underlying implementation:怎么翻译?),
 
  不靠谱的。
 
  我的理解与推测:
 
  “Select” 不加 “Order by”时, MySQL 会尝试以尽可能快的方法(MySQL 实际的方法不见得快)返回数据。
 
  由于访问主键、索引大多数情况会快一些(在Cache里)所以返回的数据有可能以主键、索引的顺序输出,
 
  这里并不会真的进行排序,主要是由于主键、索引本身就是排序放到内存的,所以连续输出时可能是某种序列。
 
  在一些情况下消耗硬盘寻道时间最短的数据会先返回。
 
  如果只查询单个表,在特殊的情况下是有规律的。
 
  最后总结
 
  “Order By 是要加的”
 
  如果谁想更深一步了解,需要看看 MySQL 的源代码了。
 

(编辑:应用网_常德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!