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

Tan*_*rty 2 php mysql query-performance mariadb

我一直在 MariaDB 中开发一个具有大型且不断扩展的数据库的数据库。该数据库由 PHP 应用程序访问。

我将数据库字符集和排序规则设置为 utf8mb4 和 utf8mb4_unicode_ci

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

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

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

Avi*_*gar 5

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

CREATE TABLE t1
(
    c0 INT NOT NULL,
    c1 CHAR(10) CHARACTER SET latin1
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
Run Code Online (Sandbox Code Playgroud)

是的,它确实会影响查询性能。请注意,字符集本质上是用不同数量的字节保存的单个字符。如果只有英文字母,通常拉丁文是最好的字符集。此外,根据您的 MySQL 版本,不同的字符集会带来不同的性能。也请参考这篇文章。这可能会有所帮助。

https://www.percona.com/blog/2019/02/27/charset-and-collat​​ion-settings-impact-on-mysql-performance/