★数据库建表优化

1、冷热分离: 一个表里最好不要存在即有常修改的数据又有不常修改的数据,一个好的做法是,把常修改更新的字段当做热表单独建表,同理不经常修改更新的字段当做冷表单独建表。

2、控制B+树的高度: 也就是控制一个表存储的数据行最好在300万到500万数据之间。

3、优先选择符合存储的最小数据类型: 并且例如varchar这种可变大小设置为2的n次方是一个好习惯。

4、禁止存放图片与文件: 因为图片或者文件数据过大,存储的时候会直接溢出变成BLOB,可以选择存储图片或文件的存放位置。

5、BLOB或TEXT单独存放: 单独存放这些会减少表所占大小,因为这两个数据存储很大。

6、禁止设置Null: 所有字段必须设置默认值,并且不允许为 null,如果一个字段没有设置默认值,而且允许为 null,那么在插入数据时,如果不显式地指定该字段的值,那么该字段的值就会是 null,这可能导致数据错误或逻辑混乱。

7、小数类型禁止使用 float 和 double : 在 MySQL 中,小数类型包括 float、double、decimal,虽然 float 和 double 可以存储比 decimal 更大的数值,但它们的精度问题可能会导致计算结果出错。

8、单表字段不要超过30个: 如果一个表中的字段太多,可能会导致 MySQL 性能下降、工作量增加。

9、单表索引数不要超过 5 个 : 在数据库中,为了提高查询效率,我们通常会在表的字段上创建索引。但是,索引会占用磁盘空间,维护索引也需要时间和资源。如果过度创建索引,将会导致查询变慢。建议:a.在确定要创建哪些索引时,可以优先考虑常用的查询条件和需要频繁更新的字段。例如:如果经常按日期范围查询,则可以在日期字段上创建索引。b.在创建索引时,避免在具有大量重复值的列上创建索引,会浪费磁盘空间(例如给性别字段创建索引)。c.使用索引优化器来确定哪些索引最适合特定查询。索引优化器可以帮助我们避免创建不必要的索引,并确保查询性能的最大化。d.建议使用联合索引。

10、 in过滤 条件中数量不宜过多: 在使用 IN 语句时:a.尽可能减少 IN 语句中包含的值的数量。b.如果需要查询多个值,可以考虑使用多个 OR 条件来替代 IN 语句。c.如果在 IN 语句中包含大量的值时,需要考虑使用其他的查询方式,常见的优化方法是将 IN 语句替换成 EXISTS 子查询。

11、尽可能的不用外键关联,改用存储关联id

12、使用like查询注意: like '%mysql' 和 like '%mysql%' 会无法用到索引,like 'mysql%'可以用到索引。

13、选择合适的搜索引擎:

14、固定长度的表会更快::变长的字段: VARCHAR,TEXT,BLOB。只要你的表中包括了其中一个这些字段,就不属于定长表。

15、设置主从读写分离

16、解决随机取值慢优化: Mysql解决随机选取问题

17、解决count()优化: Mysql count()为啥慢

18、语句不走索引的问题排查与优化: Mysql 不执行索引问题与优化

19、MySQL高级日志binlog、undoLog、redoLog: Mysql 高级日志binlog、undoLog、redoLog 详解

其他博客参考: 1、参考一

相关推荐
wqq_99225027717 分钟前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空19 分钟前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
聂 可 以2 小时前
Windows环境安装MongoDB
数据库·mongodb
web前端神器2 小时前
mongodb多表查询,五个表查询
数据库·mongodb
门牙咬脆骨2 小时前
【Redis】redis缓存击穿,缓存雪崩,缓存穿透
数据库·redis·缓存
门牙咬脆骨2 小时前
【Redis】GEO数据结构
数据库·redis·缓存
wusong9992 小时前
mongoDB回顾笔记(一)
数据库·笔记·mongodb
代码小鑫2 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
changuncle2 小时前
MongoDB数据备份与恢复(内含工具下载、数据处理以及常见问题解决方法)
数据库·mongodb
久醉不在酒2 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql