可能重复:
Default sort-ordering in MySQL (ALTER TABLE … ORDER BY …;)MySQL的默认顺序取决于WHERE
我有这样的一个表:
CREATE TABLE IF NOT EXISTS `table_test` (
`id` mediumint(8) unsigned NOT NULL,
`country` enum('AF','AX','AL') DEFAULT NULL,
`number` tinyint(3) unsigned DEFAULT NULL,
`sort_order` double unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `country` (`country`),
KEY `id` (`id`,`country`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
我有我换了一台默认排序如:
ALTER TABLE test_table ORDER BY sort_order ASC;
该表从不更新,并且在其生命周期中不删除或添加任何记录。这一切似乎工作,所以如果我使用以下查询:
SELECT * FROM test_table LIMIT 10
它以正确的顺序返回10条记录。
即使我用:
SELECT * FROM test_table WHERE num=3
返回正确的顺序的结果。
但如果我这样做
SELECT * FROM test_table WHERE country='AX'
它将返回以相反的顺序结果。
有人能告诉我这是怎么发生的吗?
'country'被编入索引,可能'country'索引与sort_order不同,或者它根本没有排序。或者在你的情况下,它意外地反向排序... – Vili
_ORDER BY对于包含用户定义的聚簇索引(PRIMARY KEY或NOT NULL UNIQUE索引)的InnoDB表没有意义。 InnoDB总是按照这样的索引排序表行,如果有的话。 - - http://dev.mysql.com/doc/refman/5.1/en/alter-table.html - 我知道你的表引擎是MEMORY,但是我认为案件是一样的。 – Vili
这似乎是类似于:http://stackoverflow.com/questions/725717/default-sort-ordering-in-mysql-alter-table-order-by ..除了从文档:请注意,该表不保留按照此顺序插入和删除。这个选项主要用于当你知道你主要是在大部分时间以特定顺序查询行时。在对表格进行重大更改后使用此选项,您可能会获得更高的性能。在某些情况下,如果表格按照您希望稍后订购的列顺序排列,可能会使MySQL的排序更容易...可能,May ...不要依赖 – xQbert