前几天和别人聊到了慢SQL,一个SQL查询很慢,会有什么原因。我在学校做的小Demo里面数据量太小并没有涉及到性能优化问题,但是思考这个问题倒以从上到下把数据库给捋一捋。
一个SQL查询,如果看成是一个程序的执行,无非是想办法省内存,省磁盘空间,省CPU缓存,省调度。从这几个角度去想,就很容易理解了。
优化查询的方法:
- 使用索引
- 优化SQL语句
- 优化数据库对象
- 硬件优化
- MySQL自身优化
使用索引:
一般大家能想到的就是使用索引了。但是要避免全表扫描,首先考虑在where,order by,group by 涉及的列上建立索引。
优化SQL语句:
- 通过explain,可以看到SQL的执行效果,从而选择更好的索引和优化查询语句。比如:explain selext * from student。
- 查询的时候不要用 * 号,这样会返回你用不到的字段,最好是用具体的字段替代。
- 不在索引列上做运算或者使用函数。
- 查询的时候尽量使用 limit 减少返回的行数。
优化数据库对象:
- 使用 procedure analyse() 函数对表进行分析,这个函数可以对表中列的数据类型提出优化建议。表的数据类型的第一个原则是,能正确表示和存储数据的最短类型。能小就小。比如:select * from student procedure analyse()。
- 分表。如果一个表中有些列常用有些不常用,就垂直拆分,即把主键和一些列放在一个表中,把主键和另外一些列放在另一个表总。如果都常用,这个一个表又太大了,那就按行拆分,大表拆小表,也叫水平拆分。
- 中间表。如果要经常对一个表进行aggregation,那么我可以把这些结果用一个中间表存起来。
硬件优化:
这个时候就是能用钱解决的东西就用钱解决,更好的CPU,更大的内存,性能更强的SSD。
MySQL自身优化:
不要忘了,在安装Mysql的时候,里面还有一个my.cnf配置文件,里面可以对各项参数进行优化调整,比如加大MySql的查询缓存,加大数据库连接池。
原文:https://www.cnblogs.com/guangluwutu/p/12362247.html
如果您也喜欢它,动动您的小指点个赞吧