2013-05-02 187 views
0

A VARCHAR(1000)列将包含在WHERE子句中,例如,VARCHAR上的MySQL索引(1000)

WHERE propertyValue IN ('sample, ...') 

这些值将大多是唯一的,但不保证/约束。

我想索引这个,我想知道最好的方法是什么。我意识到像这样索引列会使插入速度变慢。

会将该值的散列值存储为CHAR(64),并且索引和搜索速度会更快?我的想法是一个固定大小的值,比较适合索引。

我使用5.1和INNODB

+0

使用INDEX时,所有INSERT语句都需要更新INDEX,这可能会降低INSERT语句的速度,所以在使用VARCHAR(1000)在列上创建INDEX时应谨慎行事。根据您在本专栏中存储的内容,在使用WHERE x IN(a,b,c)时,可能需要使用完整的INDEX,而不是部分INDEX。 – Cninroh 2013-05-02 15:10:11

回答

2

最简单的方法将是使用局部索引:

CREATE INDEX ON [...] propertyValue(100) [...] 

只要列中第一列100个字符(在该例子中)是相当独特的,这将足以使索引工作。