您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

【数据库】处理慢SQL

bubuko 2022/1/25 20:10:15 其他 字数 1689 阅读 1030 来源 http://www.bubuko.com/infolist-5-1.html

前几天和别人聊到了慢SQL,一个SQL查询很慢,会有什么原因。我在学校做的小Demo里面数据量太小并没有涉及到性能优化问题,但是思考这个问题倒以从上到下把数据库给捋一捋。 一个SQL查询,如果看成是一个程序的执行,无非是想办法省内存,省磁盘空间,省CPU缓存,省调度。从这几个角度去想,就很容易理解了 ...

前几天和别人聊到了慢SQL,一个SQL查询很慢,会有什么原因。我在学校做的小Demo里面数据量太小并没有涉及到性能优化问题,但是思考这个问题倒以从上到下把数据库给捋一捋。

一个SQL查询,如果看成是一个程序的执行,无非是想办法省内存,省磁盘空间,省CPU缓存,省调度。从这几个角度去想,就很容易理解了。

 

优化查询的方法:

  1. 使用索引
  2. 优化SQL语句
  3. 优化数据库对象
  4. 硬件优化
  5. MySQL自身优化

使用索引:

  一般大家能想到的就是使用索引了。但是要避免全表扫描,首先考虑在where,order by,group by 涉及的列上建立索引。

优化SQL语句:

  1. 通过explain,可以看到SQL的执行效果,从而选择更好的索引和优化查询语句。比如:explain selext * from student。
  2.  查询的时候不要用 * 号,这样会返回你用不到的字段,最好是用具体的字段替代。
  3. 不在索引列上做运算或者使用函数。
  4. 查询的时候尽量使用 limit 减少返回的行数。

优化数据库对象:

  1. 使用 procedure analyse() 函数对表进行分析,这个函数可以对表中列的数据类型提出优化建议。表的数据类型的第一个原则是,能正确表示和存储数据的最短类型。能小就小。比如:select * from student procedure analyse()。
  2. 分表。如果一个表中有些列常用有些不常用,就垂直拆分,即把主键和一些列放在一个表中,把主键和另外一些列放在另一个表总。如果都常用,这个一个表又太大了,那就按行拆分,大表拆小表,也叫水平拆分
  3. 中间表。如果要经常对一个表进行aggregation,那么我可以把这些结果用一个中间表存起来。

硬件优化:

  这个时候就是能用钱解决的东西就用钱解决,更好的CPU更大的内存性能更强的SSD

MySQL自身优化:

  不要忘了,在安装Mysql的时候,里面还有一个my.cnf配置文件,里面可以对各项参数进行优化调整,比如加大MySql的查询缓存加大数据库连接池

 

【数据库】处理慢SQL

原文:https://www.cnblogs.com/guangluwutu/p/12362247.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶