这一篇文章证实了以前对 MySQL 优化程序的工作原理.
MySQL 就像一个人一样, 总是聪明的去选择当前最快的方式去查询, 而不是像 Oracle 数据那样死板地根据规格去查询.
查询的要求在于快. 而对于数据库来说, 最耗时的在磁盘 IO, 如何减少磁盘 IO 的次数, 成为提高查询速度的最为关键的因素. 于是在这种情况, 基于 B 树, B + 树的索引就应运而生了.
索引又有聚簇索引与非聚簇索引之分, 其主要区别在于, 聚簇索引非叶结点只存储主键, 不存储数据行, 如此以来, 非叶结点占用的空间小, 一个磁盘块便可以装更多的结点, 这样索引
的高度便会降低, 对应的就是磁盘 IO 次数的减少 (每次读取数据时, 根据局部性原理, 都是读取一个内存页, 一个内存页有几个磁盘块大小).
现在回到查询速度问题上来, 如何较少磁盘 IO 的次数, 用索引.. 如何不使用索引呢, 减少数据行的数目, 减少表的大小 (在数据行数目确定的话, 便是减少每个数据行的占用空间), 扩大
内存的参数, 使能有更大的内存来装从磁盘读取的数据行. 具体优化程序会采用哪种方式, 全表查询还是索引, 关键在于优化程序对现有数据的评估 (MySQL 某种方式来记录数据的情况).
一次就能把所有的数据行读取到内存中, 确实没有必要使用索引.
来源: http://www.bubuko.com/infodetail-2729225.html