0

我不确定复合索引是否是正确的词;我的意思是我有一个包含多个列的索引。

问题:

我的主键由两列组成,它们工作正常;A 列和 B 列。当我尝试在由两个 columnA 和 columnC 组成的同一个表上创建另一个索引时,我遇到了麻烦。一旦我创建了第二个索引,它就会接管并成为聚集索引,因此表被它排序,忽略首先创建的主键索引。

可能的解决方案:

我想要按 ColumnA 和 ColumnB 上的第一个索引排序的表,但我将第二个索引用于其他目的。为了解决这个问题,我可以复制第二个表中的数据,其中 ColumnA 和 ColumnC 是唯一的索引,但如果可以避免,我不想这样做。

系统信息: MySQL

4

1 回答 1

1

在 MySQL(以及任何其他 SQL 引擎)中,不能保证您的表是按任何特定顺序排序的。确保排序的唯一方法是使用ORDER BY子句。

现在,如果您不使用 ORDER BY,则无法保证排序的原因:当您插入或删除行时,服务器可以自由地为新插入重用“孔”。此外,服务器可以自由地首先从缓存或当前磁盘头所在的位置传递行,如果这样可以获得更好的性能 - 如果您LIMIT不使用ORDER BY.

因此,长话短说,只需始终ORDER BY在您的选择中使用,您的问题就会消失。

于 2013-07-14T08:18:41.543 回答