我一直在MariaDB中使用大型和扩展数据库的数据库。数据库由PHP应用程序访问。
我将DB字符集和排序规则设置为utf8mb4和utf8mb4\u unicode\u ci
但并非所有的表都有text(varchar、text等)列。有些表只保存关系,因此所有列都是数字类型(int、bigint等)或日期/时间等。此外,不是文本类型。
在表中,我只保留数字,我是否需要保留Unicode多字节字符集/排序规则,或者我可以选择其他东西?
最重要的是,这会影响查询性能吗?
影响性能的因素大致顺序如下:
也就是说,使用你需要的字符集和归类;不要担心性能。
即使您的表具有排序规则和字符集,具有数值的列也不需要任何排序规则和字符集定义。因此,考虑选择这样的东西是无关紧要的。您可以创建如下表,而无需为数字列定义排序规则:
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/
如果您想在mysql/mariaDB中添加自定义排序规则,那么对于utf-8字符集,您可以修改/字符集/索引。xml并使用LDML语法扩展字符集: 但是没有名为“utf8mb4”的字符集标记。所以我用name=“utf8mb4”创建了一个,并添加了排序规则/规则标记,在phpmyadmin中,我可以选择新创建的排序规则。但我不能插入四字节字符;我得到了错误 (使用内置的mb4排序规则,我可以做到这
问题内容: 我在表中有两个索引字段- 和(单个索引,不是复合索引)。 的字段值非常有限(假设它仅为0或1),因此50%的表记录具有相同的。另一方面,值来自更大的集合,因此具有相同值的记录量很小。 这些查询中的任何一个都会比另一个查询运行得更快吗? 另外,如果两个字段都没有索引,是否会改变行为? 问题答案: SQL被设计为一种声明性语言,而不是一种过程性语言。因此,查询优化器应该 不会 考虑在决定如
我正在使用ASP. net开发一个网站,我的数据库是MYSQL。 在那里,我不希望用户限制只发布英文内容到我的网站。所以为了支持多语言,我决定使用Charset作为Utf8MB4,使用归类作为utf8_general_ci。 所以现在我有几个问题。 1) 我是否应该将数据库的字符集设置为Utf8MB4,并对utf8\u general\u ci进行排序? 2) 使用数据库的字符集Latin1和排序
问题内容: 假设我有一个漫长而昂贵的查询,里面挤满了条件,搜索了大量的行。我还有一个特殊条件,例如公司ID,它将限制需要大量搜索的行数,将其范围从数十万缩小到几十。 我这样做是否会对MySQL性能产生任何影响: 或这个: 问题答案: 不,顺序应该不会有太大的不同。当发现哪些行与条件匹配时,将针对每一行检查整个条件(通过布尔逻辑组合的所有子条件)。 一些智能数据库引擎将尝试猜测条件的哪些部分可以更快
问题内容: 我可以阅读 MySQL 文档,这很清楚。但是,如何决定要使用哪个字符集?整理对哪些数据有影响? 我要求对两者以及如何选择它们进行解释。 问题答案: 从MySQL 文档: 甲 字符集 是一组符号和编码。甲 归类 为在一个字符集的字符进行比较的一组规则。让我们通过一个假想字符集的例子来清楚地区分。 假设我们有一个包含四个字母的字母:“ A”,“ B”,“ a”,“ b”。我们给每个字母一个
我正在使用外部数据库(只读)与本地数据库(测试系统)。 所以每次从外部数据库获取数据时,我都会得到如下异常警告,默认为空字符,如“”。 character_set_connection=latin1 character_set_database=utf8 character_set_filesystem=二进制 character_set_results=latin1 character_set_