MySql干货分享
1.索引
1.B+Tree:索引底层是用的B+tree数据结构,这种结构可以大幅度提升查询性能,因为B+tree底层是由叶子节点组成的单向列表,塑造出它的稳定性,尤其是范围内的数据检索。b树遍历需要繁琐的中序遍历,b+s树就不需要,直接读取单链表就可以获取到范围内数据,由于B+tree相比较于B树,其树的的高度会相比较低,所以在遍历时会少很多遍历的时间,在时间复杂度上就已经很低。所以B+tree是目前为止性能最高的索引结构。索引之所快也就是将传统的顺序遍历改为二分查找,可以使得要遍历的次数很大程度上减少。
2.Mysql索引:B+tree索引是目前大多数Mysql默认索引方式,索引又分为聚簇索引和非聚簇索引。聚簇索引是一个记录着数据的索引节点,非聚簇索引是存着主键id,再由id去寻找真实数据。
哈希索引:哈希索引是查找速度极快的一种索引,其时间复杂度能到O(1),但是由于是hash策略实现。所以不支持排序和分组,只支持精确查找,不支持范围查找和范围查找。
全文索引:innodb不支持全文索引,MyISAM支持全文索引,记录着关键字到文献的映射。
空间数据索引:支持空间维度上的索引机制,GIS相关。
3.索引优化
1.索引的优化实质上就是尽可能的利用到索引,索引在查询过程中既不能是函数一部分也不能是表达式一部分,不然会导致索引失效的问题。
2.尽可能的使用多列索引,多列索引会让限制条件更加严格,让索引发挥更大的作用。
3.索引列的顺序有时候也会影响查询效率。
4.对于Blob,text,varchar类型的数据使用前缀索引再好不过,可以只索引前部分的数据,可以节省时间。
5.覆盖索引
4.索引的优点
1.索引会让我们查询次数降低,实质层面上也就减少了IO操作,因为IO操作相当费时;
2.帮助服务器避免分组和排序,因为索引在数据结构层面上,已经有排序和分组的特征。
3.稳定性,将随机性的IO变成顺序性的IO,B+Tree索引会将相邻的数据节点放在一起。
5.索引的适合范围
1.索引在小数据量的数据库中,发挥的作用并不大,因为创建索引也是一定程度上增加了空间复杂度,大部分建立全表扫描要比建立索引更加高效。
2.在中型数据量的数据库上可以加索引,因为这个可以大幅度提升数据的查询效率。
3.大型数据量的数据库上,不仅需要索引,也可以考虑建立分库分表技术来缓解数据库的压力。
6.查询的优化
1.对于大查询可以将大查询分割成一个个小查询,有效减少服务器的压力。
2.分解大连接查询
三.存储引擎
目前mysql两个存储引擎分别为 innodb和myisam引擎;从几个维度来对这两个存储引擎进行比对。
事务:前者支持事务,后者不支持事务
外键:前者支持外键,后者不支持外键
热备份:前者支持热备份,后者不支持热备份
安全性:前者课恢复性更高,后者崩溃可恢复性比较低。
并发:MyIsam支持表级锁,Innodb还支持行级锁。
其他:MyIsam支持空间索引和压缩表。
#MySQL#