我们在上文中给大家简单介绍了程序员在开发MySQL数据库的时候会用到的一些存储引擎类型等内容,而本文我们就继续来了解一下,MySQL数据库调优方法分享。
核心理念
选择合适的存储引擎
平衡范式与冗余,为提高效率可以牺牲范式设计,冗余数据。
大化利用索引,尽可能避免全表扫描,减少无效数据的查询;
不在数据库做计算,cpu计算务必移至业务层。
控制单表数据量,单表记录控制在千万级。控制列数量,字段数控制在20以内。
拒绝3B(big),也即是大sql,大事务,大批量。
基本原则
减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO;
返回更少的数据:只返回需要的字段和数据分页处理减少磁盘io及网络io;
减少交互次数:批量DML操作,函数存储等减少数据连接次数;
减少服务器CPU开销:尽量减少数据库排序操作以及全表查询,减少cpu内存占用;
利用更多资源:使用表分区,可以增加并行操作,更大限度利用cpu资源
字段类优化
避免使用NULL字段:
NULL字段很难查询优化
NULL字段的索引需要额外空间
NULL字段的复合索引无效
索引原则
选择性索引,性索引的值是的,可以更快速的通过该索引来确定某条记录。
为经常需要排序、分组和联合操作的字段建立索引。
为常用作为查询条件的字段建立索引。
限制索引的数目:越多的索引,会使更新表变得很浪费时间。尽量使用数据量少的索引,如果索引的值很长,那么查询的速度会受到影响。尽量使用前缀来索引,如果索引字段的值很长,好使用值的前缀来索引。
删除不再使用或者很少使用的索引。
左前缀匹配原则,非常重要的原则。
尽量选择区分度高的列作为索引区分度的公式是表示字段不重复的比例。
索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。
尽量的扩展索引,不要新建索引
索引类优化,例如:
谨慎合理使用索引
改善查询、减慢更新
索引一定不是越多越好(能不加就不加,要加的一定得加)
覆盖记录条数过多不适合建索引,例如“性别”
字符字段必须建前缀索引
不在索引做列运算
innodb主键合理使用自增列,主键建立聚簇索引,主键不应该被修改,字符串不应该做主键,如果不指定主键,innodb会使用且非空值索引代替
不用外键,请由程序保证约束
sql类优化如,例如:
sql语句尽可能简单
一条sql只能在一个cpu运算
大语句拆小语句,减少锁时间
一条大sql可以堵死整个库
简单的事务
事务时间尽可能短