优化慢执行或慢查询的方法

Posted williamjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化慢执行或慢查询的方法相关的知识,希望对你有一定的参考价值。

 

1、查询如果慢的建立索引可以提升速度

相当于就是之前一个表数据量比较小,之后数据量大了查询就变慢,此时在经常用到的字段上加个索引,效率会翻倍很多的

2、建立索引是为了提升速度,所以避免对索引字段进行计算或类型转化

例如: where a * 5 = 10 可以 转化为 where a = 10/5  
这样既可以保证业务逻辑也可以继续使用原索引去操作,所以要避免对索引字段进行计算或类型转化

3、表的设计尤为重要,避免使用LEFT JOIN 或 RIGHT JOIN去联表查询

如果业务逻辑允许,且表里几乎无脏数据,那就可以使用JOIN去联表查询,而不建议使用LEFT JOIN或RIGHT JOIN去查询,因为本身它们联表都是有区别的,建议使用JOIN去联表,尽量的去提升速度

4、查询字段时不要全部返回,忌讳使用*,最好是用什么字段返回什么地段,也可使得相关业务更加清晰

不建议 select * from table_name;
  • 1

因为查询,返回结果集,都会花费io,还有带宽一些资源,所以结果集内容少速度也会提升的

5、有些情况对字段的使用比较特殊,建议去建议表达式索引去提供效率

表达式索引,如经常对一个字段进行 lower(字段xxx), 那就可以创建 表达式 lower(字段xxx) 的索引,只有操作可以使用到索引,速度必然会有所提升

6、部分索引其实差不多是联合索引,几个字段查询的值一直都是常量,此时就可以考虑部分索引

如: where a = ‘f‘ and b = ‘2‘
  • 1

就可以建立一个 a = ‘f’ and b = ‘2’ 的部分索引,因为业务经常会用到,自然会提升速度

7、分解执行复杂sql,关注执行sql执行时间,关注lock粒度

如一下操作的数据量比较大,不管是DML、DDL语言都得考虑lock的粒度,不能影响线上业务操作,一般都是分布执行,不要为了省事,而导致业务挂掉,那就得不偿失了,操作前先查看操作数据量的级别

8、索引的维护(BDA操作范畴)

索引的维护,把一些不用的且占磁盘空间比较大,自然得删除,或者跟据业务逻辑对某字段的索引算法进行调整再或者使用新的索引去替代老的索引,注意处理同一个字段的两个索引的优化时,如果存在主从复制的机制在的话,维护索引注意不要影响生产业务

注意:以上优化都是基于不改变原有业务需求所做的优化,否则另换它法去优化

9、常见的几种索引算法

B-Tree、 Hash、Gist、SP-Gist、Gin、BRin
  • 1

要用那种索引,跟据业务逻辑的特点或者字段的类型而定


以上是关于优化慢执行或慢查询的方法的主要内容,如果未能解决你的问题,请参考以下文章

PHP对接口执行效率慢的优化

PHP对接口执行效率慢的优化

执行 SQL 案例表达式非常慢(查询优化)

MySQL - 添加多个派生表时查询慢 - 优化

MySql性能优化(排查慢查询SQL)

优化JAVA查询Mongodb数量过大,查询熟读慢的方法