可能重复: MySQL中的默认排序(ALTER…)…定单;)
我有一张这样的桌子:
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'它将以相反的顺序返回结果。
谁能告诉我怎么会发生这种事吗?
发布于 2011-12-13 11:53:37
在表上指定order只是帮助引擎加快具有相同顺序的查询。它不会强迫mysql始终以相同的顺序返回结果。
在这里描述:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
"ORDER使您能够以特定的顺序创建带有行的新表。请注意,在插入和删除之后,该表不会保持此顺序。此选项主要是当您知道大部分时间都要按特定顺序查询行时使用此选项。在对表进行重大更改后使用此选项,您可能能够获得更高的性能。在某些情况下,如果表按您希望在以后对其进行排序的列排序,则可能更容易对该表进行排序。“
因此,您也必须在查询中使用ORDER表达式。
发布于 2011-12-13 11:48:18
我想您的国家索引的默认顺序是DESC。正因为如此,如果使用这个命令,您就会得到“错误”的顺序,而且在所有其他情况下都是不同的。不确定是否可以或如何在mysql中指定索引的顺序,但我认为是这样。
但我仍然不确定,如果您没有指定订单,您是否可以依赖订单。只需将ORDER语句添加到所有查询中即可。
发布于 2011-12-13 11:46:00
为什么不尝试这样的查询:
SELECT * FROM test_table ORDER BY sort_order ASC LIMIT 10;
SELECT * FROM test_table WHERE num=3 ORDER BY sort_order ASC;
SELECT * FROM test_table WHERE country='AX' ORDER BY sort_order ASC;https://stackoverflow.com/questions/8488588
复制相似问题