varchar 大小越小,我的数据库索引的性能是否会更高?

Mic*_*ass 6 mysql schema index index-tuning mysql-5.7

我们使用的是Mysql 5.7

我们在大约 5 亿行的表中的 varchar(255) 列上有一个索引。

select distinct varchar_column from table产生 7 个结果,最大长度为 21。

一位 DBA 顾问建议我们将 varchar 列的长度降低到 21。在测试中降低 varchar 列的大小会缩小索引大小,相当于简单地对表进行碎片整理而不更改架构(例如alter table)。

当我们将长度减少到 17 时,我们看到了稍微好一些的结果。

除了索引大小之外,我们还缺少什么优势吗?

Rol*_*DBA 4

使用列时会出现一些 CPU 扰动,VARCHAR因为必须进行长度计算。无论VARCHAR(21)或 ,这都是正确的VARCHAR(255)。如果您寻求更快的速度,则必须将 更改VARCHAR(21)CHAR(21)

这将使行长度和索引更大,但您会看到更好的结果。大小与速度的权衡是非常值得的。

我之前讨论过这个

对于使用 MySQL 5.x 的用户,您应该使用以下命令确定正确的大小和类型

select distinct varchar_column from table PROCEDURE ANALYSE();
Run Code Online (Sandbox Code Playgroud)

请参阅有关 PROCEDURE ANALYSE() 的 MySQL 5.7 文档。(在 8.0 中已弃用)。