oro*_*aki 10 mysql database django varchar database-design
我正在使用Django并设置我的CharField(max_length = 255),即使我只打算使用大约5个字符.这效率不高吗?我已经读过它与varchar无关,但后来读到它会节省硬盘空间来仅指定你需要的东西.
Ale*_*ski 12
通常,varchar(255)需要与varchar(1)一样多的存储空间.在每种情况下,表都存储类似指针到字符串表和长度的东西.例如,4字节偏移+ 1字节大小=每行固定5个字节,仅用于开销.
实际内容当然是在字符串表中,它只与您的商店中的字符串一样长.因此,如果您在varchar(255)字段中存储5个字母的名称,它将仅使用(比方说)5个开销字节+5个内容字节= 10个字节.
使用varchar(10)字段将使用完全相同的数量,但只会截断超过10个字节的字符串.
当然,具体数字取决于存储引擎的实现.
除了存储字符串长度的开销之外,varchar不会占用比存储在其中的字符串更多的空间:
+------------------------------------------+---------------------------------+
| Value | CHAR(4) Storage Required | VARCHAR(4) Storage Required |
+------------+-----------------------------+---------------------------------+
| '' | ' ' 4 bytes | '' 1 byte |
| 'ab' | 'ab ' 4 bytes | 'ab' 3 bytes |
| 'abcd' | 'abcd' 4 bytes | 'abcd' 5 bytes |
| 'abcdefgh' | 'abcd' 4 bytes | 'abcd' 5 bytes |
+------------+-----------------------------+---------------------------------+
Run Code Online (Sandbox Code Playgroud)
但是,如果确实只需要5个字符,那么如果表中没有其他可变宽度的列(即varchars,text或blob),请考虑使用char(5)。然后,您将获得固定长度的记录,它确实具有一些性能优势:
对于经常更改的MyISAM表,应尝试避免使用所有可变长度列(VARCHAR,BLOB和TEXT)。如果该表甚至只包含一个可变长度的列,则使用动态行格式。请参阅第13章,存储引擎。
归档时间: |
|
查看次数: |
6040 次 |
最近记录: |