mysql优化,抛砖引玉

参考:http://www.admin10000.com/document/13593.html

随着数据大小增加,索引本身大小也随之增加。索引以索引文件的形式存储在磁盘上。每次读取索引时多会产生I/O消耗(没读取一个节点,就要进行一次I/O消耗),相比于内存消耗,I/O消耗要高几个数量级。为了降低I/O消耗,一种办法就是降低树的深度。将二叉树变成m叉树。B+Tree树就是一种多路搜索树。理解B+Tree注意两个方面:1)所有数据(关键字)存储在叶子节点,非叶子节点不存储真正的数据。2)所有叶子节点由指针相连。如图为高度为2的简化的B+Tree。

mysql为何将节点大小设置为页的整数倍?
根据磁盘存储原理,为了减少磁盘I/O,磁盘往往不是严格按需读取,而是每次都会预读。预读长度一般为页的整数倍。
页是计算机管理存储器的逻辑块。硬件和OS往往将主存和磁盘存储分割为连续大小相等的块,每个存储称为一页。主存和磁盘以页为单位交换数据。当计算机要读取的数据不在主存时,会触发一个缺页异常。此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中,然后返回异常,程序继续执行。
mysql利用这个预读原理,将一个节点的大小设为一个页。这样每个加点只需要一次I/O就可以完全载入。

虽然索引可以大大提高查询效率,但维护仍要耗费很大代价,因此要合理创建索引。

猜你喜欢

转载自www.cnblogs.com/alatar16/p/8997357.html