MySQL优化技术:负载均衡,读写分类,分库分表,索引优化…
MySQL数据库优化
负载均衡技术
多数据库同步
数据库的读写分离
数据库复制
数据库拆分(分布式)
CAP法则
垂直(纵向)拆分
按功能模块拆分
水平(横向)拆分
将同一张表的数据分块存储到不同的数据库
索引优化
索引选择性
索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?
答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引。
- 表记录比较少,例如一两千条甚至只有几百条记录的表,没必要建索引,让查询做全表扫描就好了。至于多少条记录才算多,这个个人有个人的看法,我个人的经验是以2000作为分界线,记录数不超过 2000可以考虑不建索引,超过2000条可以酌情考虑索引。
- 索引的选择性较低。所谓
索引的选择性
(Selectivity),是指不重复的索引值(也叫基数,Cardinality)与表记录数(#T)的比值:Index Selectivity = Cardinality / #T
显然选择性的取值范围为(0, 1],选择性越高的索引价值越大,这是由B+Tree的性质决定的。
有一种与索引选择性有关的索引优化策略叫做前缀索引,就是用列的前缀代替整个列作为索引key,当前缀长度合适时,可以做到既使得前缀索引的选择性接近全列索引,同时因为索引key变短而减少了索引文件的大小和维护开销。