在同一个表上添加两个复合索引的异常行为

时间:2013-07-14 08:13:44

标签: mysql

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

问题:

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

可能的解决方案:

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

系统信息: MySQL

1 个答案:

答案 0 :(得分:1)

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

现在,如果您不使用ORDER BY,则无法保证订购的原因:当您插入或删除行时,服务器可以为新插入重用“漏洞”。此外,如果您使用LIMIT而不使用ORDER BY,则服

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