业界公认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这三个列上的多列索引。
主主复制提高不了写速度
整个过程处处体现出分而治之的手段