CPU、内存、磁盘IO、网络作为性能优化的四大天王,但MySQL中一条查询语句的执行成本是由磁盘IO和CPU成本决定的:
I/O成本
我们的表经常使用的MyISAM、InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。
CPU成本
读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为CPU成本。
没有大数据量的查询,一般I/O成本还好。当然代码中也不允许一次查询上万条数据,如果需要导数据可以走从库和延时从库。其实在我们工作当中,应用程序从数据库查询数据,最多出现的是频繁调用,sql频繁调用很大程度是消耗的CPU,出现这种问题怎么办呢?
进入MySQL使用show processlist, 查看当前MySQL使用频繁的 sql 语句,反复调用此命令,就能把循环调用的sql,如果开发这样在主库上做的话,一定要拉出去祭天。database被大量的循环调用,会消耗大量的CPU。
当然我们也不能把锅全部甩给硬件,你自己做到了“勿以善小而不为,勿以恶小而为之”了吗?SQL查询成本不止包括执行成本也包括索引优化和连接优化,一般分为四个步骤:
根据搜索条件,找出所有可能使用的索引
计算全表扫描的代价
计算使用不同索引执行查询的代价
对比各种执行方案的代价,找出成本最低的那一个
总之,MySQL的查询成本是多方面,要想做到高性能MySQL,需要运维,开发,DBA一起努力。
每周一句|记得,当你被现实痛苦的攻击,请问自己,我想要什么?然后盯紧你的梦想,而不是你的敌人!
领取专属 10元无门槛券
私享最新 技术干货