MySQL索引:索引中的大小字段是什么?

时间:2018-11-15 19:59:04

标签: mysql

“索引”中的“大小”字段是什么以及它如何工作?

enter image description here

2 个答案:

答案 0 :(得分:1)

创建索引时,可以指定索引中仅应包含值的前缀。这是索引的大小。对于大多数数据类型而言,它是可选的,但对于mydata[-1, ] <- mydata[-1, ] * (mydata[-1, ] >= 3 * mydata[rep(1, nrow(mydata) - 1), ]) mydata # [,1] [,2] [,3] [,4] [,5] # threshold 1.95 1.76 3.67 0.57 2.33 # S1 6.00 0.00 0.00 3.00 0.00 # S2 0.00 0.00 0.00 8.00 16.00 # S3 0.00 14.00 0.00 12.00 0.00 TEXT列而言则是必需的。如果列的长度超过了索引大小的限制,则也需要该列;例如,对于某些表格式,InnoDB的索引大小限制为767个字节;如果要为BLOB列建立索引,则需要指定小于768的前缀大小。

请参见Column Prefix Key Parts

答案 1 :(得分:1)

这将对多少值进行唯一索引。您可以一对一地对整个值编制索引,也可以仅对可以将多个值放入一个存储区的前缀编制索引。这是性能/空间的权衡。

这是一个简化的示例。

如果要使用单个字符创建索引...

create table animals (
    name varchar(255),
    index(name(1))
);

那只会索引每个名字的第一个字符。

index       name
----------------
A           Ape
A           Aardvark
A           Ant
A           Anteater
B           Baboon
C           Cat
D           Dog
D           Dingo

因此,当您查询where name = 'Aardvark'时,它将使用A索引来查找Ape, Aardvark, Ant, Anteater的列表并进行搜索。索引可以提高查询的性能,但是仍然需要进行一些搜索。

假设您有index(name(3))

index       name
----------------
Ape         Ape
Aar         Aardvark
Ant         Ant
Ant         Anteater
Bab         Baboon
Cat         Cat
Dog         Dog
Din         Dingo

现在,当您查询where name = 'Aardvark'时,它将使用Aar索引来查找Aardvark,并且执行起来很快。但是,如果您搜索where name = 'Ant',它将使用Ant查找Ant, Anteater,并且必须搜索该列表。

您需要在索引大小和适合您的数据和查询的性能之间做出决定。


一个实际的例子,说我将SHA-1校验和存储为文本。那是40个字符长。但实际上,前7个或第8个字符非常有可能是唯一的。因此,我存储了所有40个字符,但只索引了前8个字符。

checksum char(40),
index(checksum(8))

现在where checksum = '97531bc4cb33c00f3e9ff10d65386b8e96cdae3d'将使用97531bc4索引,并且可能会产生单个值。这样可以节省大量空间,而不会影响性能。