原sql:

SELECT
res_id_ori
FROM
wk_sheet A,
wk_page b
WHERE
A .wk_sheet_id = b.wk_sheet_id
AND b.res_id_ori IN ('','','','','','','','')
and a.status = -999 and a.scan_status = 3 ;

原sql执行计划:

Planning time: 0.145 ms
Execution time: 1313.189 ms

优化方案:创建联合索引

create index  idx_residori_sheetid on wk_page(res_id_ori,wk_sheet_id); 

sql执行计划:

EXPLAIN  (analyze,verbose,timing,costs,buffers)
SELECT
res_id_ori
FROM
wk_sheet A,
wk_page b
WHERE
A .wk_sheet_id = b.wk_sheet_id
AND b.res_id_ori IN ('','','','','','','','')
and a.status = -999 and a.scan_status = 3 ; --优化效果

Planning time: 0.203 ms
Execution time: 123.095 ms

联合索引,res_id_ori 由于它in数量少,建议做联合索引前缀;要是res_id_ori太多也会走全表扫码。(wk_sheet_id做前缀比res_id_ori 做前缀慢个200ms,这个需要根据具体情况 具体分析)

 

总结:

1.把合适的业务字段作为主键字段,如果没有合适的就选择从1自增的非业务字段作为主键字段
2.通过explain 检验新上线sql性能以及诊断优化慢查询
3.关于关联查询的建议就是在每个表的关联字段上都要创建索引
4.全表扫描时, 需要在where条件上选择性高的单字段或组合字段上创建索引避免全表扫描
5.如何创建联合索引:
        如果其中有一个字段的选择性高达80%就只需在此字段上创建索引;如果没有选择性高过50%的字段则选择创建联合索引 如果创建联合索引,应该将哪个字段作为前缀索引,结合两个指标 :
        1、选择高频出现的字段作为联合索引前缀列 相比于上面的sql,有另一个sql :select * from t1 where col2=2;只以col2作为条件,这种情况下就将col2作为前缀索引,因为这样可以使得两个sql都会用到联合索引idx_col2_col3 
        2、如果没有情况1,则选择选择性最高的字段作为前缀;且都需通过 select count(distinct col1,col2...)/count(*) from t;来选择一种选择性最高的组合来创建联合索引

其他mysql sql优化也是一样的。

postgresql in 优化的更多相关文章

  1. postgresql 配置文件优化

    postgresql 配置文件优化 配置文件 默认的配置配置文件是保存在/etc/postgresql/VERSION/main目录下的postgresql.conf文件 如果想查看参数修改是否生效, ...

  2. PostgreSQL配置优化

    硬件和系统配置 操作系统 Ubuntu13.04 系统位数 64 CPU Intel(R) Core(TM)2 Duo CPU 内存 4G 硬盘 Seagate ST2000DM001-1CH164 ...

  3. 连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑

    由于是开发阶段,所以并没有配置postgres的参数,都是使用安装时的默认配置,以前运行也不见得有什么不正常,可是前几天我的cpu资源占用突然升高.查看进程,发现有一个postgres的进程占用CPU ...

  4. PostgreSQL 如何优化索引效率

    使用 gin() 创建全文索引后,虽然有走索引,但是当结果集很大时,查询效率还是很底下, SELECT keyword,avg_mon_search,competition,impressions,c ...

  5. PostgreSQL SQL优化之NOT IN问题

    在我们平时写SQL时,如果遇到需要排除某些数据时,往往使用id <> xxx and id <> xxx,进而改进为id not in (xxx, xxx); 这样写没有问题, ...

  6. PostgreSQL 欺骗优化器之扩展统计信息

    一.什么是扩展统计 扩展统计对象, 追踪指定表.外部表或物化视图的数据. 目前支持的种类: 启用n-distinct统计的 ndistinct. 启用功能依赖性统计的dependencies. 启用最 ...

  7. 基于linux(CentOS7)数据库性能优化(Postgresql)

    基于CentOS7数据库性能优化(Postgresql) 1.  磁盘 a)         Barriers IO i.              通过查看linux是否加载libata,确定是否开 ...

  8. PostgreSQL 优化器代码概览

    简介 PostgreSQL 的开发源自上世纪80年代,它最初是 Michael Stonebraker 等人在美国国防部支持下创建的POSTGRE项目.上世纪末,Andrew Yu 等人在它上面搭建了 ...

  9. 使用PostgreSQL进行全文检索

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

随机推荐

  1. 数据库——SQL-SERVER练习(6) 数据库安全性

    一.实验准备 (1)运行SQL-SERVER服务管理器, 启动服务(2)运行查询分析器,  以DBA身份登录数据库服务器:      用户名sa,  密码123456(3)打开CREATE-TABLE ...

  2. 数据库——SQL-SERVER练习(1)连接与子查询

    一.实验准备 1.复制实验要求文件及“CREATE-TABLES.SQL”文件, 粘贴到本地机桌面. 2.启动SQL-SERVER服务. 3. 运行查询分析器, 点击菜单<文件>/< ...

  3. CENTOS 7 内网网段在用IP地址检测Shell脚本优化版

    脚本内容 #!/bin/bash ############################################################################# # 用途: ...

  4. SEH hook 的一种方法

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) 该方法的一些原理暂 ...

  5. java基础(29):JDBC、DBUtils

    1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...

  6. XML的互相序列化对象

    using System.Xml.Serialization; using System.IO; using System.Xml; namespace Common { public class X ...

  7. Cesium-空间分析之通视分析(附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  8. Android自定义注解

    1.元注解   概念:用来定义其他注解的注解,自定义注解的时候,需要使用它来定义我们的注解.   在jdk 1.5之后提供了 java.lang.annotation 来支持注解功能   常见的四种元 ...

  9. [转]Eclipse插件开发之基础篇(5) 制作OSGi Bundle

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_2.html 1. 生成OSGi工程 首先打开新工程 ...

  10. dart lang 开发环境

    ========================Dart SDK 下载========================Dart SDK 主页: https://dart.dev/toolsDart S ...