MySQL 8.4 Release Notes
10.4.2.2 字符和字符串类型的优化
对于字符和字符串列,请遵循以下指导原则:
-
在不需要语言特定排序功能时,使用二进制排序顺序进行快速比较和排序操作。您可以使用
BINARY
运算符在特定的查询中使用二进制排序。 -
当比较来自不同列的值时,尽可能声明这些列具有相同字符集和排序规则,以避免在运行查询时进行字符串转换。
-
对于大小小于8KB的列值,使用二进制
VARCHAR
而不是BLOB
。GROUP BY
和ORDER BY
子句可以生成临时表,如果原始表中没有包含BLOB
列的临时表,则这些临时表可以使用MEMORY
存储引擎。 -
如果一张表包含字符串列如姓名和地址,但许多查询并不检索这些列,考虑将字符串列分离到一个单独的表中,并在必要时使用连接查询和外键。MySQL在读取任何值时会读取包含该行所有列(以及可能的其他相邻行)的数据块。保持每行小巧,只包含最频繁使用的列,可以让更多行容纳在一个数据块中。这样的紧凑表减少了常规查询所需的磁盘I/O和内存使用。
-
如果您在
InnoDB
表中使用随机生成的值作为主键,并且可能的话,前缀它以升序的值,如当前日期和时间。当连续的主键值物理上存储在相邻位置时,InnoDB
可以进行更快的插入和检索。 -
请参阅第10.4.2.1节,“优化数值数据”,了解为什么一个数值列通常比等效的字符串列更受欢迎。