我不确定复合索引是否是正确的词;我的意思是我有一个由多个列组成的索引。
问题:
我的主键由两列组成,它们工作正常; columnA和columnB。当我尝试在由两个columnA和columnC组成的同一个表上创建另一个索引时,我遇到了麻烦。一旦我创建了第二个索引,它就会接管并成为聚簇索引,因此表会按顺序排序,忽略主键索引首先创建。
可能的解决方案:
我想要由ColumnA和ColumnB上的第一个索引排序的表,但是我将第二个索引用于其他目的。为了解决这个问题,我可以在第二个表中复制数据,其中ColumnA和ColumnC是唯一的索引,但如果可以避免,我不想这样做。
系统信息: MySQL
答案 0 :(得分:1)
在MySQL(以及任何其他SQL引擎)中,无法保证您的表按任何特定订单排序。确保排序的唯一方法是使用ORDER BY
子句。
现在,如果您不使用ORDER BY,则无法保证订购的原因:当您插入或删除行时,服务器可以为新插入重用“漏洞”。此外,如果您使用LIMIT
而不使用ORDER BY
,则服
所以,长话短说,只需在您的选择中使用ORDER BY
,您的问题就会消失。