博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL优化一例:GROUP BY的语句
阅读量:6970 次
发布时间:2019-06-27

本文共 2022 字,大约阅读时间需要 6 分钟。

SQL语句:

select t.type, count(t.id) as todo_count from mc_job_form t where t.state = '2' and t.customs_code = :a group by t.type

表结构:

ID VARCHAR2(24) N   id
IN_OUT_FLAG CHAR(1) Y   
PROVIDER_ID NUMBER Y   
APPLY_FORM_ID VARCHAR2(24) Y   
DECLARE_APPLY_ID VARCHAR2(24) Y   
PROPOSER_ID VARCHAR2(20) Y   
MANUAL_ID CHAR(12) Y   
TRADE_TYPE VARCHAR2(3) Y   
COMPANY_CODE CHAR(10) Y   
COMPANY_NAME NVARCHAR2(50) Y   
PROVIDER_NAME NVARCHAR2(50) Y   
GROSS_WEIGHT NUMBER(19,5) Y   
NET_WEIGHT NUMBER(19,5) Y  
AMOUNT NUMBER(19,5) Y   
WRAP_TYPE VARCHAR2(32) Y   
TRUNK_NO NVARCHAR2(255) Y   
CREATE_TIME DATE Y   
DECLARE_TIME DATE Y   
IN_TIME DATE Y   
CUSTOMS_CODE CHAR(4) Y   
PORT CHAR(4) Y   
REMARK NVARCHAR2(255) Y   
STATE CHAR(1) Y   
COMMENTS NVARCHAR2(200) Y  
TYPE VARCHAR2(2) Y   
PROPOSER NVARCHAR2(20) Y   
OUT_TIME DATE Y   
PROPOSER_PHONE VARCHAR2(20) Y   
CONTRACT_NO VARCHAR2(32) Y   
TALLY_COMMENTS NVARCHAR2(200) Y   
TALLY_TIME DATE Y   
TALLY_APPROVE_COMMENTS NVARCHAR2(200) Y   
ASSO_JOB_FORM_ID VARCHAR2(24) Y   
DATA_ORIGIN CHAR(1) Y   
GUARANTY_AMOUNT NUMBER(19,5) Y   
ASSO_FLAG CHAR(1) Y   
AREA_TYPE CHAR(1) Y   

优化前执行计划:

SELECT STATEMENT, GOAL = ALL_ROWS   Cost=6 Cardinality=7 Bytes=63
 HASH GROUP BY   Cost=6 Cardinality=7 Bytes=63
  TABLE ACCESS FULL Object owner=INMAN Object name=MC_JOB_FORM Cost=5 Cardinality=23 Bytes=207

无效的优化:(原因是索引未加入GROUPBY列)
-- Create/Recreate indexes 
create index TESTGG on MC_JOB_FORM (STATE, CUSTOMS_CODE)
  tablespace IN_MAN_DATA
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

有效的优化:

-- Create/Recreate indexes 
create index TESTGG on MC_JOB_FORM (STATE, CUSTOMS_CODE, TYPE)
  tablespace IN_MAN_DATA
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

优化后执行计划:

SELECT STATEMENT, GOAL = ALL_ROWS   Cost=1 Cardinality=7 Bytes=63
 SORT GROUP BY NOSORT   Cost=1 Cardinality=7 Bytes=63
  INDEX RANGE SCAN Object owner=INMAN Object name=TESTGG Cost=1 Cardinality=23 Bytes=207

总结:

要确保group by 的列全部在索引中,并且列的属性不能为空,优化潜力很大的,我测了小数据量的

本文转自zylhsy 51CTO博客,原文链接:http://blog.51cto.com/yunlongzheng/410425,如需转载请自行联系原作者

你可能感兴趣的文章
[译] iPhone X 网页设计
查看>>
webpack入门及踩坑应对指南
查看>>
对于数据库优化的理解
查看>>
python学习三:列表、元组、字典、集合
查看>>
Netty 框架总结「ChannelHandler 及 EventLoop」
查看>>
Linux 下启动 Tomcat 抛出Can't connect to X11 window server 问题的解决方法
查看>>
Hexo博客NexT主题美化之显示当前浏览进度
查看>>
java版b2b2c社交电商spring cloud分布式微服务(七)springboot开启声明式事务
查看>>
品质生活正式开启,欧普照明&华为智选再创智能家居里程碑式突破
查看>>
【本人秃顶程序员】分库分表怎么才能无限扩容,看这篇文章就对了
查看>>
迁移潮来袭!数十个项目宣布即将停止支持 Python 2
查看>>
Javascrip—装饰器(7)
查看>>
Java 11 已发布,String 还能这样玩!
查看>>
(一)java版电子商务spring cloud分布式微服务b2b2c社交电商-服务的注册与发现(Eureka)...
查看>>
使用DataV制作实时销售数据可视化大屏
查看>>
Hello Juejin
查看>>
AndroidStudio导入或者新建项目一直build
查看>>
laravel项目
查看>>
Azure 文档 (SQL 数据仓库, Azure SQL 数据库文档)
查看>>
基于arm的多路温度采集控制系统(4)菜单界面
查看>>