MySQL性能优化步骤演进

业界公认MySQL单表容量在1千万以下是最佳状态,因为这时它的BTREE索引树高在3~5之间

思考:为什么MySQL单表1千万的索引树高是3~5?

索引优化

索引优化是最基础的优化手段,也是程序员的必须掌握的基本知识,是本文的重点

索引的主要功能:查找和排序

哪些情况需要创建索引

1、主键自动创建主键索引
2、频繁作为查询条件的字段
3、查询时与其他表关联的字段
4、查询时需要排序的字段(访问建立索引的字段将大大提高排序速度)
5、查询时统计或分组的字段(本质上分组的过程就是排序)
复制代码

哪些情况不要创建索引

1、表记录太少(多少为少,1000以下)
2、频繁更新的字段不适合的字段(索引提高了查询速度,但同时也会降低更新的速度,更新操作不单单是更新了记录还要更新索引)
3、where条件用不到的字段
4、数据重复且平均分布的字段,如性别
复制代码

索引选择性是什么?
索引的选择性(Selectivity),指的是不重复的索引值(也叫基数,Cardinality)和表记录数(#T)的比值。选择性是索引筛选能力的一个指标。索引的取值范围是 0-1 ,当选择性越大,越接近1,索引价值也就越大。

索引选择性(Index Selectivity)= 基数(Cardinality)/ 总行数(#T)
SQL = SELECT COUNT(DISTINCT(字段))/COUNT(*) AS Selectivity FROM 表名;
复制代码

索引选择性与前缀索引

单列索引 VS 组合索引 (高并发倾向建立组合索引) 当我们执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。

拆表优化

主机优化

主从分离(针对读的优化)

写库拆分(针对写的优化)

主主复制提高不了写速度

整个过程处处体现出分而治之的手段

猜你喜欢

转载自juejin.im/post/5e6d01ca518825496814b78a