数据库规范,熬夜肝了一篇

2023年 7月 11日 88.8k 0

  • 数据库和表的字符集统一,尽量使用UTF8(根据业务需求)
  • 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效
  • UTF8和UTF8MB4字段进行关联,会导致索引失效
  • 除非特殊情况,禁止建表指定字符集(采用库默认字符集),降低出现字符集不统一导致性能问题的风险。
  • 无特殊要求,禁止指定表COLLATE -----

    COLLATE主要的作用是排序的规则以及检索的规则,utf8字符集默认的是 utf8_general_ci ,utf8mb4字符集默认的是utf8mb4_general_ci,结尾的ci意思是不区分大小写。

    COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响DISTINCT、GROUP BY、HAVING语句的查询结果。比如:select * from test where name like 'A%',在 utf8_bin字符集下,是无法检索出 ‘abc’字段的,并且排序的情况下Abc和abc所在的顺序是不一致的。

  • 慎重选择row_format(行记录格式)

    Barracuda: 新的文件格式。它支持InnoDB的所有行格式,包括新的行格式:COMPRESSED 和 DYNAMIC

    在 msyql 5.7.9 及以后版本,默认行格式由innodb_default_row_format变量决定,它的默认值是DYNAMIC

    db默认的innodb_file_format 为 Barracuda,默认的innodb_default_row_format为 dynamic;其中COMPRESSED 压缩比经测试最大也就 1/2,但读取和写入会有额外cpu开销,并且申请内存是按照解压后的原大小申请,在高并发情况下容易导致性能问题。

    Dynamic行格式,列存储是否放到off-page页,主要取决于行大小,他会把行中最长的一列放到off-page,直到数据页能存放下两行。TEXT或BLOB列

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论