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、参考一