mysql全表遍历为啥耗时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql全表遍历为啥耗时相关的知识,希望对你有一定的参考价值。

参考技术A 全表遍历就是一个全表扫描的过程,就是根据双向链表把磁盘上的数据页加载到磁盘的缓存页里去,然后在缓存页内部查找那条数据。这个过程是非常满的,所以说当数据量大的时候,全表遍历性能非常低,时间特别长,应该尽量避免全表遍历。

全表 or 索引

这一篇文章证实了以前对MySQL优化程序的工作原理。

MySQL就像一个人一样,总是聪明的去选择当前最快的方式去查询,而不是像Oracle数据那样死板地根据规格去查询。

查询的要求在于快。而对于数据库来说,最耗时的在磁盘IO,如何减少磁盘IO的次数,成为提高查询速度的最为关键的因素。于是在这种情况,基于B树,B+树的索引就应运而生了。

索引又有聚簇索引与非聚簇索引之分,其主要区别在于,聚簇索引非叶结点只存储主键,不存储数据行,如此以来,非叶结点占用的空间小,一个磁盘块便可以装更多的结点,这样索引

的高度便会降低,对应的就是磁盘IO次数的减少(每次读取数据时,根据局部性原理,都是读取一个内存页,一个内存页有几个磁盘块大小)。

现在回到查询速度问题上来,如何较少磁盘IO的次数,用索引。。如何不使用索引呢,减少数据行的数目,减少表的大小(在数据行数目确定的话,便是减少每个数据行的占用空间),扩大

内存的参数,使能有更大的内存来装从磁盘读取的数据行。具体优化程序会采用哪种方式,全表查询还是索引,关键在于优化程序对现有数据的评估(MySQL某种方式来记录数据的情况)。

一次就能把所有的数据行读取到内存中,确实没有必要使用索引。

以上是关于mysql全表遍历为啥耗时的主要内容,如果未能解决你的问题,请参考以下文章

C++遍历mysql结果集,一万条数据花多长时间?

MySQL如何选择合适的索引

性能测试之数据库篇-查询

MySQL索引及执行计划

为啥sql语句使用IN的效率不好?

mysql select * order by 索引 limit0,10 为啥是全表扫描