字符集和排序规则会影响 MySQL/MariaDB 中的查询性能吗?

Posted

技术标签:

【中文标题】字符集和排序规则会影响 MySQL/MariaDB 中的查询性能吗?【英文标题】:Does character set and collation affects query performance in MySQL/MariaDB? 【发布时间】:2020-03-10 09:30:44 【问题描述】:

我一直在研究 MariaDB 中的大型数据库和扩展数据库。数据库由 php 应用程序访问。

我将 DB 字符集和排序规则设置为 utf8mb4 和 utf8mb4_unicode_ci

但并非我的所有表格都有文本(varchar、文本等)列。有些表只包含关系,因此所有列都是数字类型(int、bigint 等)或日期/时间等,但不是文本类型。

在我只保留数字的表格中,我是否需要保留 unicode 多字节字符集/排序规则,或者我可以选择其他内容?

最重要的是,这会影响查询性能吗?

【问题讨论】:

【参考方案1】:

即使您的表具有排序规则和字符集,具有数值的列也不需要任何排序规则和字符集定义。因此,考虑选择类似的东西是无关紧要的。您可以创建如下表而不为数字列定义排序规则:

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/

【讨论】:

谢谢。我明白。但是您会花一些时间告诉我字符集和排序规则是否会影响查询性能?例如,如果一个表只包含英文字母,那么我应该使用哪个字符集和排序规则而不是 utf8mb4 以及它如何帮助查询性能(如果有)? 是的,它确实会影响查询性能。请注意,字符集本质上是用不同字节数保存的单个字符。如果只有英文字母,通常拉丁文是最好的字符集。此外,根据您的 mysql 版本,不同的字符集提供不同的性能。也请参考这篇文章。这可能会有所帮助。 percona.com/blog/2019/02/27/… 您可以将以上评论写为答案,我将其标记为正确。非常感谢。【参考方案2】:

影响性能的东西,大概按顺序

索引不佳 查询表述不当 磁盘 I/O 满足查询需要读取的行数 在此列表的底部:表达式、函数、字符集、排序规则等。

使用你需要的字符集和排序规则;不用担心性能

【讨论】:

以上是关于字符集和排序规则会影响 MySQL/MariaDB 中的查询性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

数据库、表、列排序规则的区别

请你说说MySQL的字符集与排序规则对开发有哪些影响?

js sort 数组中包含数组怎么排序

SQL Server 排序规则的影响

使用二进制排序规则有啥影响?

MySQL/MariaDB - 按内部子查询排序