ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 11845|回复: 41

[精华] 这样一条sql应该怎么优化? [复制链接]

注册会员

中级会员

精华贴数
1
技术积分
644
社区积分
32
注册时间
2003-11-18
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2004-7-4 22:02:19 |显示全部楼层
select * from sys_user where user_code = 'zhangyong' or user_code in (select grp_code from sys_grp where sys_grp.user_code = 'zhangyong')

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=RULE
   1    0   FILTER
   2    1     TABLE ACCESS (FULL) OF 'SYS_USER'
   3    1     INDEX (UNIQUE SCAN) OF 'PK_SYS_GRP' (UNIQUE)

里面的查询返回的记录数一般只有一两条,但sys_user表的数据很多,怎么样才能让这条sql以sys_grp为驱动表?

谢谢!

注册会员

资深会员

精华贴数
0
技术积分
1547
社区积分
48
注册时间
2004-7-4
论坛徽章:
3
会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10
发表于 2004-7-4 22:45:25 |显示全部楼层
虽然子查询里面返回的纪录数很少,但你用的是or,,
只是单纯以sys_grp为`驱动表意义也不大。
最好把你这俩个表的定义,数据分布给列给大家看看,
这样更有助于对这个SQL进行优化。

使用道具 举报

注册会员

中级会员

精华贴数
1
技术积分
644
社区积分
32
注册时间
2003-11-18
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2004-7-5 09:34:55 |显示全部楼层
SQL> select count(distinct user_code) from sys_grp;

COUNT(DISTINCTUSER_CODE)
------------------------
                    14580

SQL> select count(distinct grp_code) from sys_grp;

COUNT(DISTINCTGRP_CODE)
-----------------------
                     300

SQL> select count(distinct user_code) from sys_user;

COUNT(DISTINCTUSER_CODE)
------------------------
                    15190

为什么说有or 的时候用sys_grp为驱动表意义也不大?

使用道具 举报

注册会员

中级会员

精华贴数
1
技术积分
644
社区积分
32
注册时间
2003-11-18
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2004-7-5 10:39:29 |显示全部楼层
up啊

使用道具 举报

超级版主

天下有雪

精华贴数
66
技术积分
208411
社区积分
6479
注册时间
2001-10-8
论坛徽章:
100
ITPUB元老
日期:2005-02-28 12:57:00ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36现任管理团队成员
日期:2011-05-07 01:45:08ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB技术丛书作者
日期:2010-09-26 15:00:232010系统架构师大会纪念
日期:2010-09-03 16:39:572010数据库技术大会纪念徽章
日期:2010-05-13 10:04:282009架构师大会纪念徽章
日期:2010-01-18 13:43:21祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:212009日食纪念
日期:2009-07-22 09:30:00参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:28
发表于 2004-7-5 11:21:17 |显示全部楼层
索引情况如何?

user_code 上有索引么?
sys_grp有多少记录?

使用道具 举报

注册会员

中级会员

精华贴数
1
技术积分
644
社区积分
32
注册时间
2003-11-18
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2004-7-5 12:07:16 |显示全部楼层
SQL> select count(*) from sys_grp;

  COUNT(*)
----------
      25130

SQL> select count(*) from sys_user;

  COUNT(*)
----------
      15190


两个表的user_code都建了index

使用道具 举报

注册会员

斑竹

精华贴数
0
技术积分
450
社区积分
295
注册时间
2004-7-1
论坛徽章:
3
数据库板块每日发贴之星
日期:2005-10-19 01:01:30管理团队2006纪念徽章
日期:2006-04-16 22:44:45会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2004-7-5 12:19:53 |显示全部楼层
你分析过table,index和column了吗?

使用道具 举报

注册会员

中级会员

精华贴数
1
技术积分
644
社区积分
32
注册时间
2003-11-18
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2004-7-5 12:21:22 |显示全部楼层
我们那里用RBO

使用道具 举报

注册会员

斑竹

精华贴数
0
技术积分
450
社区积分
295
注册时间
2004-7-1
论坛徽章:
3
数据库板块每日发贴之星
日期:2005-10-19 01:01:30管理团队2006纪念徽章
日期:2006-04-16 22:44:45会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2004-7-5 12:24:15 |显示全部楼层
select * from sys_user

一定要用select * 吗?

使用道具 举报

超级版主

天下有雪

精华贴数
66
技术积分
208411
社区积分
6479
注册时间
2001-10-8
论坛徽章:
100
ITPUB元老
日期:2005-02-28 12:57:00ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36现任管理团队成员
日期:2011-05-07 01:45:08ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB技术丛书作者
日期:2010-09-26 15:00:232010系统架构师大会纪念
日期:2010-09-03 16:39:572010数据库技术大会纪念徽章
日期:2010-05-13 10:04:282009架构师大会纪念徽章
日期:2010-01-18 13:43:21祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:212009日食纪念
日期:2009-07-22 09:30:00参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:28
发表于 2004-7-5 12:27:02 |显示全部楼层
试一下把or展开

select * from sys_user where user_code = 'zhangyong'
union all
select * from sys_user where user_code <> 'zhangyong'
and user_code in (select grp_code from sys_grp where sys_grp.user_code = 'zhangyong')

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部