MySQL: 为什么要使用VARCHAR(20)而不是VARCHAR(255)?
对于MySQL数据库中的VARCHAR类型,我们通常会看到VARCHAR(20)、VARCHAR(255)、VARCHAR(500)等等,那么选择哪种长度更好呢?下面将从存储空间、查询速度等角度进行分析。
阅读更多:MySQL 教程
存储空间
使用VARCHAR(20)比VARCHAR(255)更节省存储空间,因为 VARCHAR类型的数据储存时需要根据实际长度进行存储。
例如,我们有姓名字段需要存储,若都使用VARCHAR(255)的话,那么名字长度为1的记录和名字长度为10的记录,在数据库中所占据的存储空间将是相同的255字节,若是使用VARCHAR(20)来储存,则名字长度为1的记录只需要1个字节的存储空间,而名字长度为10的记录也只需要10个字节存储空间。
查询速度
使用VARCHAR(20)可带来更快的查询速度。当我们在查询VARCHAR字段时,MySQL需要比较这一字段中每个字符的值,对于更长的字段长度,这个比较也就会更耗费时间。
例如,我们需要查询所有姓为“张”的用户,若使用VARCHAR(255)储存姓名,需要对整个字段进行遍历才能找到所有姓为“张”的记录,耗时和操作成本都比较高。如果我们使用VARCHAR(20)来储存姓名,就可以扫描更少的字符,加快查询速度。
同时,在一个典型的MySQL表中,一个VARCHAR(255)还占用更多的内存,从而导致更糟糕的性能。
示例说明
示例1: 一个用户的信息表,若使用VARCHAR(255)来存储用户名和密码,表结构可以设计为:
CREATE TABLE user_info(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255),
password VARCHAR(255)
);
若使用VARCHAR(20)可以节省储存空间,表结构可以设计为:
CREATE TABLE user_info(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20),
password VARCHAR(20)
);
示例2:下面是两个待查询表,分别使用VARCHAR(255)和 VARCHAR(20)类型来创建字段:
CREATE TABLE user_info1(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255),
tel VARCHAR(255),
email VARCHAR(255)
);
CREATE TABLE user_info2(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20),
tel VARCHAR(20),
email VARCHAR(20)
);
查询所有用户的电话号码以及邮箱地址:
SELECT tel, email FROM user_info1;
SELECT tel, email FROM user_info2;
结果表明,使用VARCHAR(20)字段的查询速度比使用VARCHAR(255)字段的更快。
总结
在MySQL数据库中,对于VARCHAR类型的字段长度设计,应该根据实际需要选择,避免长度设得过大,造成空间浪费以及查询速度变慢。varchar(20)作为一种常用的长度选项,能够在储存空间和查询速度之间取得一个比较好的平衡。