嗨我有一张像这样的表:
create table nasd_snapshot
( minute_id smallint not null
, symbol_id integer not null
...
PRIMARY KEY ( symbol_id, minute_id )
使PRIMARY KEY中的列与表中的列的顺序相同,或者它是否会提高效率?
我想我对内部存储的方式知之甚少,但做了一些研究。任何关于此的文章的建议或链接都表示赞赏。
THX!
DON
答案 0 :(得分:0)
添加索引ALREADY对它们进行排序。添加索引的关键是将数据排序,以便mysql可以非常快速地获取数据。它已经对索引列进行了排序,因此您不必再担心了这一点:)但是,正如您可以想象的那样,存储数据+已排序的数据会占用服务器中的更多空间。所以不要过度使用索引。还有一件事--PRIMARY索引与普通索引相同,只是它表示该索引列中的数据对于表是唯一的。自己尝试的最好的例子是:将一些数据放入数据库,比如说10.000条记录。例如,让他们成为(id, name)
。尝试SELECT * FROM table WHERE id=6451
之类的查询。然后在id列上添加索引(或PRIMARY KEY)。再试一次。如果您使用的是PhpMyAdmin,它会显示查询执行的时间。您将看到索引和未索引案例之间存在巨大差异。另外,看看桌子占用多少空间。
答案 1 :(得分:0)
不,但主键的顺序仍然很重要。
如果您将运行包含symbol_id
但不包含minute_id
的条件的查询以及涉及两者的查询,那么您可以采用正确的方法。
如果您在条件涉及minute_id
而非symbol_id
的情况下运行了大量查询,那么您最好切换它们
答案 2 :(得分:0)
答案 3 :(得分:0)
实际上,最好的方法是自己测试一下。有些用户确实发现列的顺序很重要而其他人没有。我自己通常只是使用表定义中的列顺序。
http://ralpartha.blogspot.com/2006/12/primary-key-order-does-matter.html
因此,如果可能,您应该尝试这两种方法并测量通常运行的查询。