对于字符和字符串列,请遵循以下准则:
当您不需要特定于语言的归类功能时,使用二进制归类顺序进行快速比较和排序操作。您可以使用
BINARY
运算符在特定查询中使用二进制排序规则。比较不同列的值时,尽可能使用相同的字符集和排序规则声明这些列,以避免在运行查询时进行字符串转换。
对于大小小于 8KB 的列值,请使用二进制
VARCHAR
而不是BLOB
.GROUP BY
and子句可以生成临时表,如果原始表不包含任何 列 ,ORDER BY
这些临时表可以使用 存储引擎。MEMORY
BLOB
如果一个表包含名称和地址等字符串列,但许多查询不检索这些列,请考虑将字符串列拆分到一个单独的表中,并在必要时使用带有外键的连接查询。当 MySQL 从一行中检索任何值时,它会读取一个包含该行(可能还有其他相邻行)所有列的数据块。保持每一行很小,只有最常用的列,允许更多行适合每个数据块。这种紧凑的表减少了常见查询的磁盘 I/O 和内存使用。
当您使用随机生成的值作为
InnoDB
表中的主键时,如果可能,请在其前面加上一个升序值,例如当前日期和时间。当连续的主值在物理上彼此靠近存储时,InnoDB
可以更快地插入和检索它们。请参阅第 8.4.2.1 节,“针对数字数据进行优化”,了解为什么数字列通常优于等效字符串列的原因。