mysql全表遍历为啥耗时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql全表遍历为啥耗时相关的知识,希望对你有一定的参考价值。
参考技术A 全表遍历就是一个全表扫描的过程,就是根据双向链表把磁盘上的数据页加载到磁盘的缓存页里去,然后在缓存页内部查找那条数据。这个过程是非常满的,所以说当数据量大的时候,全表遍历性能非常低,时间特别长,应该尽量避免全表遍历。全表 or 索引
这一篇文章证实了以前对MySQL优化程序的工作原理。
MySQL就像一个人一样,总是聪明的去选择当前最快的方式去查询,而不是像Oracle数据那样死板地根据规格去查询。
查询的要求在于快。而对于数据库来说,最耗时的在磁盘IO,如何减少磁盘IO的次数,成为提高查询速度的最为关键的因素。于是在这种情况,基于B树,B+树的索引就应运而生了。
索引又有聚簇索引与非聚簇索引之分,其主要区别在于,聚簇索引非叶结点只存储主键,不存储数据行,如此以来,非叶结点占用的空间小,一个磁盘块便可以装更多的结点,这样索引
的高度便会降低,对应的就是磁盘IO次数的减少(每次读取数据时,根据局部性原理,都是读取一个内存页,一个内存页有几个磁盘块大小)。
现在回到查询速度问题上来,如何较少磁盘IO的次数,用索引。。如何不使用索引呢,减少数据行的数目,减少表的大小(在数据行数目确定的话,便是减少每个数据行的占用空间),扩大
内存的参数,使能有更大的内存来装从磁盘读取的数据行。具体优化程序会采用哪种方式,全表查询还是索引,关键在于优化程序对现有数据的评估(MySQL某种方式来记录数据的情况)。
一次就能把所有的数据行读取到内存中,确实没有必要使用索引。
以上是关于mysql全表遍历为啥耗时的主要内容,如果未能解决你的问题,请参考以下文章