我如何知道MySQL中是否已按升序排列表格?

时间:2013-08-10 15:39:44

标签: mysql

示例,我有一个表,我想知道它是按字母顺序预先排列还是升序,是否有可以执行此操作的内置函数?

信件|数字|

A    |  1     |
B    |  2     |
信件|数字|

B   |   2     |
A   |   1     |

感谢。

5 个答案:

答案 0 :(得分:4)

表格中的数据未按任何顺序排列

选择数据时必须明确指定订单。如果在选择数据时未指定订单,则返回的订单既不可预测也不可靠。

答案 1 :(得分:2)

其他答案是正确的,逻辑级别的SQL不保证行以任何顺序存储。

但在物理层面,数据当然存储在某些顺序中。 MyISAM和InnoDB中的大多数索引都是B树数据结构,根据定义,它们按升序存储值。在InnoDB中,表本身以主键顺序存储为聚簇索引。

因此,针对InnoDB表的以下两个查询返回的结果顺序相同:

SELECT * FROM innodb_table;
SELECT * FROM innodb_table ORDER BY primary_key;

但这是存储实现的巧合,而不是基于SQL语言中的任何内容。

如果针对非主键执行仅索引查询,则问题会更复杂。以下查询将按用作覆盖索引的索引按升序返回行:

SELECT indexed_column FROM innodb_table;

但是一旦你打破覆盖索引,它就会恢复为默认顺序的其他选择(可能再次聚集索引顺序):

SELECT indexed_column, non_indexed_column FROM innodb_table;

MyISAM完全不同,因为它不使用聚簇索引。因此默认顺序是存储顺序 - 不是必然是插入顺序。

答案 2 :(得分:1)

表格不按特定顺序存储数据。排序是为了查看数据,以便您使用order by子句。

答案 3 :(得分:1)

在明确使用ORDER BY子句

之前,不应该依赖于如何检索数据

答案 4 :(得分:1)

将我的声音添加到答案的音乐会......

在关系数据库(例如MySQL)中,表必须被视为无序行。

事实上,你甚至不应该依赖两个相同的SELECT语句将以相同的顺序返回行的事实。

如果要根据特定顺序检索或排序行,则必须显式请求它(即:使用适当的ORDER BY子句)和< / em>提供一个允许确定性地对行进行排序的列。