字符集和排序规则是否会影响 MySQL/MariaDB 中的查询性能?
Does character set and collation affects query performance in MySQL/MariaDB?
我一直在使用 MariaDB 中的大型且不断扩展的数据库。 PHP 应用程序访问数据库。
我将数据库字符集和排序规则设置为 utf8mb4 和 utf8mb4_unicode_ci
但并非我的所有表格都有文本(varchar、文本等)列。有些表只包含关系,因此所有列都是数字类型(int、bigint 等)或 date/time 等,但不是文本类型。
在表格中,我只保留数字,我需要保留 unicode 多字节字符 set/collation 还是可以 select 其他字符?
最重要的是,这 会影响查询性能吗?
即使您的 table 具有排序规则和字符集,但具有数值的列不需要任何排序规则和字符集定义。因此,考虑选择类似的东西是无关紧要的。您可以创建如下所示的 table 而无需为数字列定义排序规则:
CREATE TABLE t1
(
c0 INT NOT NULL,
c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
是的,它确实会影响查询性能。请注意,字符集本质上是用不同字节数保存的单个字符。如果只有英文字母,通常拉丁文是最好的字符集。此外,根据您的 MySQL 版本,不同的字符集会提供不同的性能。也请参考这篇文章。这可能会有所帮助。
https://www.percona.com/blog/2019/02/27/charset-and-collation-settings-impact-on-mysql-performance/
影响性能的东西,大约顺序:
- 索引不佳
- 查询表述不当
- 磁盘I/O
- 需要读取以满足查询的行数
- 在此列表的底部:表达式、函数、字符集、排序规则等
即使用你需要的字符集和排序规则;不用担心性能.
我一直在使用 MariaDB 中的大型且不断扩展的数据库。 PHP 应用程序访问数据库。
我将数据库字符集和排序规则设置为 utf8mb4 和 utf8mb4_unicode_ci
但并非我的所有表格都有文本(varchar、文本等)列。有些表只包含关系,因此所有列都是数字类型(int、bigint 等)或 date/time 等,但不是文本类型。
在表格中,我只保留数字,我需要保留 unicode 多字节字符 set/collation 还是可以 select 其他字符?
最重要的是,这 会影响查询性能吗?
即使您的 table 具有排序规则和字符集,但具有数值的列不需要任何排序规则和字符集定义。因此,考虑选择类似的东西是无关紧要的。您可以创建如下所示的 table 而无需为数字列定义排序规则:
CREATE TABLE t1
(
c0 INT NOT NULL,
c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
是的,它确实会影响查询性能。请注意,字符集本质上是用不同字节数保存的单个字符。如果只有英文字母,通常拉丁文是最好的字符集。此外,根据您的 MySQL 版本,不同的字符集会提供不同的性能。也请参考这篇文章。这可能会有所帮助。
https://www.percona.com/blog/2019/02/27/charset-and-collation-settings-impact-on-mysql-performance/
影响性能的东西,大约顺序:
- 索引不佳
- 查询表述不当
- 磁盘I/O
- 需要读取以满足查询的行数
- 在此列表的底部:表达式、函数、字符集、排序规则等
即使用你需要的字符集和排序规则;不用担心性能.