0

嗨,我有一张这样的桌子:

create table nasd_snapshot
( minute_id         smallint not null
, symbol_id       integer not null 
...
PRIMARY KEY ( symbol_id, minute_id )

让 PRIMARY KEY 中的列与表中的列的顺序相同是否重要,或者它会更有效?

我想我对事物的内部存储方式知之甚少,但已经做了一些研究。任何建议或链接到这方面的一些文章表示赞赏。

谢谢!

大学教师

4

3 回答 3

0

添加索引已经对它们进行排序。添加索引的目的是对数据进行排序,以便 mysql 可以非常快速地获取数据。它已经对索引列进行了排序,因此您无需再担心这一点 :) 但是,正如您可以想象的那样,存储数据 + 排序数据会在服务器中占用更多空间。所以不要过度使用索引。还有一件事 - PRIMARY 索引与普通索引相同,只是它还表示该索引列中的数据对于表来说是唯一的。自己尝试的最佳示例是:将一些数据放入数据库中,比如 10.000 条记录。让他们成为,例如,(id, name)。尝试查询类似SELECT * FROM table WHERE id=6451. 然后在 id 列上添加索引(或 PRIMARY KEY)。再试一次。如果您使用的是 PhpMyAdmin,它会显示查询执行所需的时间。您将看到索引案例和未索引案例之间的巨大差异。另外,看看桌子占用了多少空间。

于 2012-05-30T17:55:21.807 回答
0

不,但主键的顺序仍然很重要。

如果您将运行条件涉及symbol_id但不minute_id涉及两者的查询的查询,那么您的方法是正确的。

如果您运行了很多涉及条件的查询minute_id,但不是symbol_id那么您最好切换它们

于 2012-05-30T17:55:33.400 回答
0

其实最好的方法是自己测试。有些用户确实发现列的顺序确实很重要,而其他用户则不重要。我自己通常只使用表定义中的列顺序。

http://ralpartha.blogspot.com/2006/12/primary-key-order-does-matter.html

因此,如果可能,您应该同时尝试并衡量您通常运行的查询。

于 2012-05-30T18:01:07.347 回答