InnoDB select性能拐点测试
分类: MySQL优化设计 | 发布: OurMySQL | 来源:Taobao DBA Team
标签: InnoDB, select, 拐点
在3000万数据的范围内,未出现所谓的性能拐点。初步猜想,前人的实验结果出现性能拐点,是因为内存耗尽,MySQL需要从磁盘上读取数据引起的。而这种性能拐点与MySQL本身的实现机制无关。
在3000万数据的范围内,未出现所谓的性能拐点。初步猜想,前人的实验结果出现性能拐点,是因为内存耗尽,MySQL需要从磁盘上读取数据引起的。而这种性能拐点与MySQL本身的实现机制无关。
优化总结:
1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;
2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;
3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。
问题分析:
这张表大约容量30G,数据库服务器内存16G,无法一次载入。就是这个造成了问题。
这条SQL有两个条件,ID一到五十万和Program_id一到四千,因为program_id范围小得多,mysql选择它做为主要索引。
先通过索引文件找出了所有program_id在1到4000范围里所有的id,这个过程非常快。
接下来要通过这些id找出表里的记录,由于这些id是离散的,所以mysql对这个表的访问不是顺序读取。
而这个表又非常大,无法一次装入内存,所以每访问一条记录mysql都要重新在磁盘上定位并把附近的记录都载入内存,大量的IO操作导致了速度的下降。