MySQL减少varchar索引大小?

We'*_*ere 1 mysql

我有一个带有varchar(255)列的表.我根据这一栏进行了很多搜索,所以我需要快速搜索select.这就是为什么我用varcharprimary 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
Run Code Online (Sandbox Code Playgroud)

Ja͢*_*͢ck 5

您在列上进行多次搜索的事实不应该是您将其作为主键的原因,或者它实际上是一个很好的候选者.

由于唯一性约束,创建像部分索引的主键之类的东西是没有用的; 但是,您可以创建部分索引:

ALTER TABLE `tablename` ADD INDEX(`colname`(10));
Run Code Online (Sandbox Code Playgroud)

然后,假设您没有指向此表的外键,则删除主键或找到更好的主键.

如果您确实有指向此表的外键,则最好创建一个代理键,例如自动递增的整数列.

  • "假设你必须指向这张表的外键"---即使你没有FK,拥有PK(单调增长或减少)仍然是一个好主意 (2认同)