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