我有一个包含varchar(255)
列的表格。我根据此列执行了大量搜索,因此我需要快速select
s。这就是为什么我使用varchar
作为primary key
,但加倍表的大小。
我有什么方法吗?我理解索引增加了列大小,但加倍它只是荒谬!
是否可以在索引中仅存储varchar的前10个字节,并通过大幅减小尺寸来大幅增加选择时间?
CREATE TABLE data_storage(
id TINYINT UNSIGNED NOT NULL,
data VARCHAR(255) CHARACTER SET utf8 NOT NULL,
no INT UNSIGNED NOT NULL,
UNIQUE KEY(id, data), PRIMARY KEY(id, no)) ENGINE = INNODB
答案 0 :(得分:5)
您在列上进行多次搜索的事实不应该是您将其作为主键的原因,或者它实际上是一个很好的候选者。
由于唯一性约束,创建像部分索引的主键之类的东西是没有用的;但是,可以创建部分索引:
ALTER TABLE `tablename` ADD INDEX(`colname`(10));
然后,假设您没有指向此表的外键,则删除主键或找到更好的主键。
如果您确实有指向此表的外键,最好创建一个代理键,例如自动递增的整数列。