主键中的列顺序,性能

Mic*_*der 5 mysql performance primary-key

由于性能原因,我有一个小问题。

我正在使用symfony和学说。我一直在实体中使用注释,最近决定切换到yml文件。

因此,我将所有实体从外部导出并生成了yml文件。

我将yml文件与数据库进行了比较。生成了一个diff文件,该文件将主键放在某些表上,然后以不同的顺序添加它们。这些主键有多列。

似乎仅当列之一是外键时才会发生。

问题是我是否可以对数据库执行更改并切换键列的顺序,还是会影响性能?

Mik*_*ll' 3

MySQL中的主键是通过唯一索引来实现的。事实上,对于当今的大多数(如果不是全部)SQL dbms 来说都是如此。

索引中列的顺序很重要。改变顺序肯定会改变性能。

MySQL 可以使用多列索引来执行测试索引中所有列的查询,或仅测试第一列、前两列、前三列等的查询。如果在索引定义中以正确的顺序指定列,则单个复合索引可以加快对同一表的多种查询的速度。

更改顺序可能有充分的理由。请参阅使用外键约束

MySQL 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会自动在引用表上创建此类索引。如果您创建另一个可用于强制执行外键约束的索引,则稍后可能会默默地删除该索引。

如果您的程序将外键列放在新主键的前面,可能是他们试图解决的问题。他们试图避免在主键列上创建索引,并单独在外键列上创建附加索引。

但这并不意味着它不会损害特定查询的性能。

至少有两种方法可以测试这一点。首先,您可以启动一个新数据库,将应用程序连接到它,然后运行它。看起来够快吗?

其次,您可以启动一个新数据库,并使用EXPLAIN手动运行部分或全部查询。