楼主: muyu208

帮忙优化下SQL语句.

[复制链接]
论坛徽章:
17
2008新春纪念徽章
日期:2008-02-13 12:43:032014年新春福章
日期:2014-02-18 16:42:02优秀写手
日期:2013-12-18 09:29:13奥迪
日期:2013-09-12 15:57:04凯迪拉克
日期:2013-08-26 22:55:57红旗
日期:2013-08-15 13:57:06茶鸡蛋
日期:2013-05-29 11:38:412013年新春福章
日期:2013-02-25 14:51:24ITPUB季度 技术新星
日期:2012-02-16 14:53:162012新春纪念徽章
日期:2012-01-04 11:51:22
发表于 2011-12-1 16:44 | 显示全部楼层
try

create index union_ind on TEST.TAB_BILL_PROVIDE( START_NO,END_NO);

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
 楼主| 发表于 2011-12-1 16:50 | 显示全部楼层
iori809 发表于 2011-12-1 16:42
这个字段是什么数据类型?

表结构

CREATE TABLE TAB_BILL_PROVIDE
(
  START_NO      VARCHAR2(20 BYTE),
  END_NO        VARCHAR2(20 BYTE),
PROVIDE_DATE  DATE                            NOT NULL,

)

使用道具 举报

回复
论坛徽章:
0
发表于 2011-12-1 17:04 | 显示全部楼层
muyu208 发表于 2011-12-1 16:50
表结构

CREATE TABLE TAB_BILL_PROVIDE

照11楼建索引,然后再看执行计划,肯定要好很多

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
 楼主| 发表于 2011-12-1 17:06 | 显示全部楼层
maclean 发表于 2011-12-1 16:44
try

create index union_ind on TEST.TAB_BILL_PROVIDE( START_NO,END_NO);

已经创建了start_no,end_no的联合索引,不加提示走全表扫描,加提示也是走全表扫描

使用道具 举报

回复
论坛徽章:
51
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22铁扇公主
日期:2012-02-21 15:03:13最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-05-22 15:10:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-12 09:34:36itpub13周年纪念徽章
日期:2014-09-28 10:55:55
发表于 2011-12-1 17:10 | 显示全部楼层
muyu208 发表于 2011-12-1 17:06
已经创建了start_no,end_no的联合索引,不加提示走全表扫描,加提示也是走全表扫描

统计信息没问题吗?

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
 楼主| 发表于 2011-12-1 17:14 | 显示全部楼层
iori809 发表于 2011-12-1 17:10
统计信息没问题吗?

重新分析过这个表的,创建索引后的执行计划
执行计划
----------------------------------------------------------
Plan hash value: 586189817

--------------------------------------------------------------------------------------
| Id  | Operation         | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |                  |   430K|    51M|  7297   (2)| 00:01:28 |
|*  1 |  TABLE ACCESS FULL| TAB_BILL_PROVIDE |   430K|    51M|  7297   (2)| 00:01:28 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("START_NO"<='205013935880' AND "END_NO">='205013935980')


统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
      33187  consistent gets
      16815  physical reads
          0  redo size
       1566  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed

使用道具 举报

回复
论坛徽章:
51
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22铁扇公主
日期:2012-02-21 15:03:13最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-05-22 15:10:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-12 09:34:36itpub13周年纪念徽章
日期:2014-09-28 10:55:55
发表于 2011-12-1 17:27 | 显示全部楼层
muyu208 发表于 2011-12-1 17:14
重新分析过这个表的,创建索引后的执行计划
执行计划
----------------------------------------------- ...

我觉得可能是你的数据类型的原因~
varchar类型但是你所做的是number的范围操作~所以没法走索引

使用道具 举报

回复
论坛徽章:
9
2012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-07 09:59:35茶鸡蛋
日期:2012-02-16 14:26:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-22 17:29:07优秀写手
日期:2014-03-20 06:00:36慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
发表于 2011-12-1 17:27 | 显示全部楼层
关键是设计问题,看样子START_NO和END_NO很有关系,能否梳理一下关系,然后在考虑sql?

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
 楼主| 发表于 2011-12-1 17:33 | 显示全部楼层
本帖最后由 muyu208 于 2011-12-1 17:58 编辑
lucky_sunny 发表于 2011-12-1 17:27
关键是设计问题,看样子START_NO和END_NO很有关系,能否梳理一下关系,然后在考虑sql?


重新描述下:
比如说公司开了10000个单号,这些单号不是一次性发放下去的,而是一批一批的发放,比如A领取1000,B领取2000个单号.以后这个单号出问题就能查到这个单号是哪里领取的.

使用道具 举报

回复
论坛徽章:
9
2012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-07 09:59:35茶鸡蛋
日期:2012-02-16 14:26:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-22 17:29:07优秀写手
日期:2014-03-20 06:00:36慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
发表于 2011-12-1 17:36 | 显示全部楼层
你判断的是在订单范围外?一般如果是范围内的话,应该是大于等于startno,小于等于endno

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表