优化慢执行或慢查询的方法
2016-06-22 20:29
204 查看
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;
因为查询,返回结果集,都会花费io,还有带宽一些资源,所以结果集内容少速度也会提升的
5、有些情况对字段的使用比较特殊,建议去建议表达式索引去提供效率
表达式索引,如经常对一个字段进行 lower(字段xxx), 那就可以创建 表达式 lower(字段xxx) 的索引,只有操作可以使用到索引,速度必然会有所提升6、部分索引其实差不多是联合索引,几个字段查询的值一直都是常量,此时就可以考虑部分索引
如: where a = 'f' and b = '2'
就可以建立一个 a = ‘f’ and b = ‘2’ 的部分索引,因为业务经常会用到,自然会提升速度
7、分解执行复杂sql,关注执行sql执行时间,关注lock粒度
如一下操作的数据量比较大,不管是DML、DDL语言都得考虑lock的粒度,不能影响线上业务操作,一般都是分布执行,不要为了省事,而导致业务挂掉,那就得不偿失了,操作前先查看操作数据量的级别8、索引的维护(BDA操作范畴)
索引的维护,把一些不用的且占磁盘空间比较大,自然得删除,或者跟据业务逻辑对某字段的索引算法进行调整再或者使用新的索引去替代老的索引,注意处理同一个字段的两个索引的优化时,如果存在主从复制的机制在的话,维护索引注意不要影响生产业务注意:以上优化都是基于不改变原有业务需求所做的优化,否则另换它法去优化
9、常见的几种索引算法
B-Tree、 Hash、Gist、SP-Gist、Gin、BRin
要用那种索引,跟据业务逻辑的特点或者字段的类型而定
pg的官方文档:
https://www.postgresql.org/docs/9.6/static/bookindex.html
相关文章推荐
- SQL中的三值逻辑
- SQL Server 作业批量停止
- 结束SQL阻塞的进程
- 动态生成SQL Server视图作业
- SQL Server 语句操纵数据库
- SQL(结构化查询语句)
- oracle sql日期比较
- linux快速部署mysql服务器
- sql 存储过程分页
- 在WINXP系统上安装SQL Server企业版的方法
- 通过批处理调用SQL的方法(osql)
- SQL Server 存储过程的分页
- ASP程序与SQL存储过程结合使用详解
- SQL SERVER编写存储过程小工具
- 防御SQL注入攻击时需要注意的一个问题
- Microsoft Sql server2005的安装步骤图文详解及常见问题解决方案
- PostgreSQL教程(八):索引详解
- PostgreSQL教程(十九):SQL语言函数