2013-04-28 97 views
0

在MySQl InnoDB中,btree索引中有多少列是否重要?MySQL多个索引每个包含1个col?或者1个包含多个cols的索引?

例如:

Key1 contains cols (col1, col2, col3) 

或者

Key1 contains col1 
Key2 contains col2 
Key3 contains col3 

请问这件事情?谢谢!

+0

“这有关系吗?”是一个非常糟糕的问题。是的,它在很多方面“重要”。一切都有折衷。请更具体地说 – Jeff 2013-04-28 13:42:16

+0

什么是折衷?我将一起查询专栏。大量的选择,大量的插入。超过11M行。 – user1797484 2013-04-28 13:43:37

+0

我想说的是让数据更明智的设计。例如,如果总是有3列,为什么不立即抓取它们?可能更好一行。如果列数不同,为什么要存储大量空列?每列可能更好一行。我怀疑是否会做到明智的表现。 – 2013-04-28 13:51:11

回答

0

是的,它很重要。

较大的索引是,很好......较大。 :-)你知道,更多的磁盘空间,慢读/更新等

事实上,当他们过大,他们偶尔会被忽略策划师如果较小,替代指标可以做的伎俩。

+0

那么最好是单独创建它们? – user1797484 2013-04-28 13:44:34

+0

这取决于你在做什么,在你的数据库引擎等等。有时在索引中有两列或多列是有用的,有时候不是。 – 2013-04-28 13:46:12

+0

http://stackoverflow.com/questions/6098616/dos-and-donts-for-indexes/6098727#6098727 – 2013-04-28 13:46:46

0

(col1, col2, col3)索引可用于:

where col1 = 1 and col2 = 2 and col3 = 3 
where col1 = 1 and col3 = 3 
where col1 = 1 

但不适合:

where col2 = 2 and col3 = 3 
where col3 = 3 

要为col2值quicky搜索,你需要与col2.(col2)开始的索引但也(col2, col3, col1)

因此,如果您想要独立于col1搜索col2col3,那么三个索引是非常优越的选择。

+0

为什么col1,col2和col3上的索引独立地在col1上工作,但不能在col2和col3上独立工作?订单是否重要? – user1797484 2013-04-28 14:23:55

+0

索引就像纸质电话本。你可以用姓氏来看人。你不能用名字来查看它们。为了按名字查找它们,需要按名字排序的第二个电话簿。 – Andomar 2013-04-28 15:08:44

+0

@ user1797484是的,多列索引具有顺序依赖关系,(col1,col2)上的索引仅在col2上不起作用。 – 2013-04-28 15:08:47