mysql优化

Posted yoxuc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql优化相关的知识,希望对你有一定的参考价值。

数据库命名规范:

  1.所以数据库对象名称统一以小写字母开头并以下划线分割(数据区分大小写)

  2.禁止使用mysql关键字命名对象

  3.对象名称须做到见名识义并且不要超过32个字符

  4.临时表须以tmp_为前缀,时间戳为后缀

  5.备份库,备份表以bak_为前缀,时间戳为后缀

  6.所有存储相同列名必须和列类型一致

数据库基本设计规范:

  1.所有表必须使用InnoDB存储引擎(支持行级锁,支持事物,mysql5.6版本之后为默认引擎,高并发性能好,更好的恢复性)

  2.数据库和表的字符集统一使用UTF-8(兼容性更好,GBK支持中文)

  3.mysql中UTF-8中文占用3个字节,ASC码占用一个字节

  4.所有表和字段须添加注释(使用comment从句)

  5.从一开始就要进行数据字典的维护

  6.尽量控制单表的数据量大小,500万行以内为最佳

  7.谨慎使用mysql分区表(分区表在物理上为多个文件,在逻辑上为一个表,跨分区查询数据效率更差,建议采用物理分表的方式拆分大表)

  8.尽量做到冷热数据分离,减小表的宽度(减少磁盘IO,保证热数据命中率)

  9.禁止在表中建立预留字段

  10.禁止在数据库中存储图片,文件等二进制数据

  11.禁止在线上数据库进行压力测试

  12.数据库各个环境进行隔离(否则会破坏生产环境数据完整性)

数据库索引设计规范:

  1.单张表的索引数量不要超过5个(索引可以提高查询效率也可以降低效率)

  2.禁止给表中每一列都建立索引

  3.SELECT,UPDATE,DELETE,语句中WHERE从句的列以及包含在ORDER BY,GROUP BY,DESTINCT中的列建立索引。

  4.JOIN关联列建立索引

  5.建立联合索引时选择区分度最高,字段长度小的列,使用最频繁的列的放在左侧(联合索引从左到右查询)

  6.避免建立重复索引(同一列建立多个索引)和冗余索引(部分索引列重复)

  7.对于频繁的查询优先考虑覆盖索引

  8.尽量避免使用外键约束

数据库字段设计规范:

  1.优先选择符合存储需要最小的数据类型(尽量将字符串转化为数字存储)

  2.对非负数据选择无符号整形类型存储

  3.varchar(N)中N代表的是字符数,不是字节数

  4.使用UTF8存储一个汉字占用3个字节

  5.过大的长度会消耗更大的内存

  6.避免使用TEXT,BLOB等数据类型,如有需要按垂直分表分成扩展表操作

  7.避免使用ENUM类型(ENUM类型使用ORDER BY 排序事效率较差,不会使用索引)

  8.尽量把所有列定义时使用NOT NULL属性(索引NULL列需要占用额外的空间保存,进行比较和计算时要另外计算)

  9.不要使用字符串存储日期型数据(使用TIMESTAMP或datetime)

  10.财务类数据使用decimal类型存储(不丢失精度)

SQL开发规范:

  1.数据库操作使用预编译语句(避免SQL注入和可以重复的使用执行计划)

  2.避免数据类型的隐式转换(隐士转换会导致索引失效)

  3.充分利用表上已经存在的索引

  4.使用LEFT JOIN或NOT EXISTS来优化NOT in操作(NOT IN会导致索引失效)

  5.程序连接不同数据库使用不同账号,禁止跨库查询(降低业务耦合度,和避免后期转库带来的麻烦)

  6.禁止使用SELECT * 进行查询(使用SELECT 字段名。。。无法使用覆盖索引,可减少表结构修改时带来的影响)

  7.禁止使用不含字段名的INSERT语句(可减少表结构修改时带来的影响)

  8.避免使用子查询(尽量优化城JOIN语句,子查询的结果集无法使用索引,会产生大量的临时表造成慢查询)

  9.避免使用JOIN关联过多的表(建议不超过5个,MYSQL最多允许关联61个)

  10.尽量减少同数据库的交互次数(读操作尽量合并成一条)

  11.使用IN代替OR操作

  12.禁止使用ORDER BY RAND()进行随机排序(如有需要在业务端处理)

  13.WHERE从句中禁止队列进行函数转换(会导致列索引失效)

  14.在明星不会有重复值使用UNION ALL 不使用UNION(UNION操作时会产生临时表占大量IO资源)

  15.拆分复杂的大SQL为多个小SQL(每个SQL操作都只会分配一个CPU进行操作,当拆分成多个小SQL时会分配多个CPU进行操作,从而导致提升效率)

数据库操作行为规范:

  1.超过百万行的批量写操作,要分批多次进行(大批量的写操作会造成严重的主从延迟)

  2.对于大表使用PT-ONLINE-SCHEME-CHANGE修改表结构(避免大表修改产生的的延迟问题)

  3.禁止为程序使用的账号使用SUPER权限

  4.对于程序连接数据库账号,遵循权限最小原则,不准有drop权限

以上是关于mysql优化的主要内容,如果未能解决你的问题,请参考以下文章

mysql 优化包括哪些内容?

Mysql的性能优化

Mysql的性能优化

mysql 子查询 优化

MySQL Optimization

MySQL优化MySQL 高并发配置优化基础知识