在MySQl InnoDB中,btree索引中有多少列是否重要?MySQL多个索引每个包含1个col?或者1个包含多个cols的索引?
例如:
Key1 contains cols (col1, col2, col3)
或者
Key1 contains col1
Key2 contains col2
Key3 contains col3
请问这件事情?谢谢!
在MySQl InnoDB中,btree索引中有多少列是否重要?MySQL多个索引每个包含1个col?或者1个包含多个cols的索引?
例如:
Key1 contains cols (col1, col2, col3)
或者
Key1 contains col1
Key2 contains col2
Key3 contains col3
请问这件事情?谢谢!
是的,它很重要。
较大的索引是,很好......较大。 :-)你知道,更多的磁盘空间,慢读/更新等
事实上,当他们过大,他们偶尔会被忽略策划师如果较小,替代指标可以做的伎俩。
那么最好是单独创建它们? – user1797484 2013-04-28 13:44:34
这取决于你在做什么,在你的数据库引擎等等。有时在索引中有两列或多列是有用的,有时候不是。 – 2013-04-28 13:46:12
http://stackoverflow.com/questions/6098616/dos-and-donts-for-indexes/6098727#6098727 – 2013-04-28 13:46:46
上(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
搜索col2
或col3
,那么三个索引是非常优越的选择。
为什么col1,col2和col3上的索引独立地在col1上工作,但不能在col2和col3上独立工作?订单是否重要? – user1797484 2013-04-28 14:23:55
索引就像纸质电话本。你可以用姓氏来看人。你不能用名字来查看它们。为了按名字查找它们,需要按名字排序的第二个电话簿。 – Andomar 2013-04-28 15:08:44
@ user1797484是的,多列索引具有顺序依赖关系,(col1,col2)上的索引仅在col2上不起作用。 – 2013-04-28 15:08:47
“这有关系吗?”是一个非常糟糕的问题。是的,它在很多方面“重要”。一切都有折衷。请更具体地说 – Jeff 2013-04-28 13:42:16
什么是折衷?我将一起查询专栏。大量的选择,大量的插入。超过11M行。 – user1797484 2013-04-28 13:43:37
我想说的是让数据更明智的设计。例如,如果总是有3列,为什么不立即抓取它们?可能更好一行。如果列数不同,为什么要存储大量空列?每列可能更好一行。我怀疑是否会做到明智的表现。 – 2013-04-28 13:51:11