MySQL: 为什么要使用VARCHAR(20)而不是VARCHAR(255)?

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)作为一种常用的长度选项,能够在储存空间和查询速度之间取得一个比较好的平衡。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程