MySQL如何存储varchar字段?我是否可以假设以下模式代表合理的存储大小:

1,2,4,8,16,32,64128255(最大值)

举例说明.假设我有一个20个字符的varchar字段.MySQL在创建这个字段时,基本上是为32字节(不确定是否为字节)保留空间,但只允许输入20字节吗?

我想我担心的是如何优化磁盘空间来容纳一张大桌子.

推荐答案

为了回答这个问题,在磁盘上,MySql使用1+字段中用于存储数据的大小(因此,如果列被声明为varchar(45),字段为"FooBar",它将在磁盘上使用7个字节,当然,除非您使用多字节字符集,否则它将使用14个字节).因此,无论您如何声明列,它都不会对存储端产生影响(您曾说过,您担心大型表的磁盘优化).然而,这确实会对查询产生影响,因为当MySql创建一个临时表(排序、顺序等)时,VARCHAR会转换为CHAR,并且单个页面中可以容纳的记录越多,表扫描的内存越少,速度也越快.

Mysql相关问答推荐

JOOQ-如何在一个查询中引用多个(但不是所有)表中的所有字段

如何计算超过特定数字的所有不同ID组,然后返回这些ID?

S在我的SQL代码中的外键出了什么问题?

MySQL逻辑全部

Python MySQL-无法从数据库中删除行

MySQL - 事务绑定多个存储过程调用和回滚的简单方法?

有没有比使用 MySQL 计划事件更好的方法来更新我的数据库表中的列?

分别针对每个不同的列 Select 聚合

连接两个表.使用连接列作为分组依据,然后根据时间戳 Select 最新行

有人可以帮我优化这个查询吗?

SQL / MySQL:如何在WHERE IN中判断类似于OR的AND逻辑

按 SQL 删除分组前的重复项

查询以从约会表中获取可用空档

MySQL - 考虑到所有前几天,每天计算唯一用户

MySQL UPDATE 锁会因为连续的 SHARE 锁而饿死吗?

MySQL时区更改?

Python MYSQL 更新语句

字符ي和ی以及波斯语的区别 - Mysql

#1146 - 表 'phpmyadmin.pma_recent' 不存在

WHERE 子句中的条件顺序会影响 MySQL 性能吗?