可能重複:
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