文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程MSSQL增加Distinct后查询效率反而提高
精品推荐
特别推荐
·常用SQL语句词典
·结束SQL注入隐患3招
·掌握SQL Server数据库的实用技巧
·SQL的简单查询
·快速解决SQL Server“安全疑难”相关问题
·SQL Server 2005:你应知道的13件事
·实例解析:减少SQL日志大小的三个好方法
·使用SQL2000将现有代码作为Web服务提供
·sql server 2000数据库置疑的解决方法
·SQL Server安全问题全攻略之口令
·XP上不能安装MicrosoftSQLSERVER2000吗
·解析Microsoft Sql Server中的like语句
·推荐;适合SQL初学者学习的SQL FAQ集锦
·SQL Server 2005 中的分区表和索引
·查询及删除重复记录的方法大全
·详细介绍优化SQL Server 2000的设置
·关于SQL SERVER 日志满的处理方法
·使用SQL Server 2000索引视图提高性能
·SQL server 2005安装问题汇总
·解决用sa登录sql 2005失败的问题
热点TOP10
·SQL Server 2005免费版本下载排行居首
·常用SQL语句词典
·在SQL Server 2000里设置和使用数据库复制
·SQL Server 2005 中的分区表和索引
·SQL server 2005安装问题汇总
·SQL的简单查询
·Sql数据库MDF数据文件数据库恢复
·SQL语法大全
·sql server 2005 排序规则与大小写敏感
·查询及删除重复记录的方法大全
·sql server日期时间函数
·在Windows xp系统上安装了SQL server服务器版
·sql server 2000数据库置疑的解决方法
·Sql server存储过程和C#分页类简化你的代码
·SQL Server 练习题
·SQL Server 2000安装和基本框架
·SQL安装问题总结
·SQL2000 数据库安装说明
·详细介绍优化SQL Server 2000的设置
·解决方案 用户 sa 登录失败

增加Distinct后查询效率反而提高

日期:2007年11月18日 作者: 查看:[大字体 中字体 小字体]


只有增加DISTINCT关键字,Oracle必然需要对后面的所有字段进行排序。以前也经常发现由于开发人员对SQL不是很理解,在SELECT列表的20多个字段前面添加了DISTINCT,造成查询基本上不可能执行完成,甚至产生ORA-7445错误。所以一直向开发人员强调DISTINCT给性能带来的影响。

没想到开发人员在测试一条大的SQL的时候,告诉我如果加上了DISTINCT,则查询大概需要4分钟左右可以执行完,如果不加DISTINCT,则查询执行了10多分钟,仍然得不到结果。

首先想到的是可能DISTINCT是在子查询中,由于加上了DISTINCT,将第一步结果集缩小了,导致查询性能提高,结果一看SQL,发现DISTINCT居然是在查询的最外层。

由于原始SQL太长,而且牵扯的表太多,很难说清楚,这里模拟了一个例子,这个例子由于数据量和SQL的复杂程度限制,无法看出二者执行时间上的明显差别。这里从两种情况的逻辑读对比来说明问题。

首先建立模拟环境:

SQL> CREATE TABLE T1 AS SELECT * FROM DBA_OBJECTS
2 WHERE OWNER = 'SYS'
3 AND OBJECT_TYPE NOT LIKE '%BODY'
4 AND OBJECT_TYPE NOT LIKE 'Java%';

Table created.

SQL> CREATE TABLE T2 AS SELECT * FROM DBA_SEGMENTS WHERE OWNER = 'SYS';

Table created.

SQL> CREATE TABLE T3 AS SELECT * FROM DBA_INDEXES WHERE OWNER = 'SYS';

Table created.

SQL> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (OBJECT_NAME);

Table altered.

SQL> CREATE INDEX IND_T2_SEGNAME ON T2(SEGMENT_NAME);

Index created.

SQL> CREATE INDEX IND_T3_TABNAME ON T3(TABLE_NAME);

Index created.

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T1', METHOD_OPT => 'FOR ALL INDEXED COLUMNS SIZE 100', CASCADE => TRUE)

PL/SQL procedure sUCcessfully completed.

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T2', METHOD_OPT => 'FOR ALL INDEXED COLUMNS SIZE 100', CASCADE => TRUE)

PL/SQL procedure successfully completed.

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T3', METHOD_OPT => 'FOR ALL INDEXED COLUMNS SIZE 100', CASCADE => TRUE)

PL/SQL procedure successfully completed.

仍然沿用上面两篇文章例子中的结构,看看原始SQL和增加DISTINCT后的差别:

SQL> SET AUTOT TRACE
SQL> SELECT T1.OBJECT_NAME, T1.OBJECT_TYPE, T2.TABLESPACE_NAME
2 FROM T1, T2
3 WHERE T1.OBJECT_NAME = T2.SEGMENT_NAME
4 AND T1.OBJECT_NAME IN
5 (
6 SELECT INDEX_NAME FROM T3
7 WHERE T3.TABLESPACE_NAME = T2.TABLESPACE_NAME
8 );

311 rows selected.

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=12 Card=668 Bytes=62124)

[1] [2] 下一页 




上一篇:另一个角度谈谈DIV+CSS

下一篇:针对Google进行网站优化

增加Distinct后查询效率反而提高 相关文章:
·在MySQL数据库增加新用户权限简介
·一个Struts实现分页,增删改查,Tiles,国际化的DEMO
·如何点亮QQ新增的滔滔图标
·合理增加账户 确保系统的安全性
·使用xmlhttp为网站增加股市行情查询功能
·Photoshop滤镜纹理叠加增添复古效果
·QQ号码服务与增值服务完全功略
·Google Earth官方中文版试用(新增宇宙遨游功能)
·新增表情漫游 第一时间看QQ2007 Beta4
·自己制造无线网络增益天线
增加Distinct后查询效率反而提高 相关软件:
·催眠倍增行动力 mp3
·轩辕剑3外传天之痕V2.02版修改器(新增符鬼修改)
·帝国时代2征服者(AOE2 Conquers)新增战役 三国志第一幕黄巾之乱
·增长的极限
·SRS Audio Sandbox(声卡效果增强软件) V1.6.7.
·逸风品网程序增强版 v1.0
·魔法门之英雄无敌V(Heroes of Might and Magic)新增地图包
·系统优化增强辅助防护美化软件『让你成为电脑装机高手』
·增血鬼 rar Vol_08
·KillCopy(文件移动复制增强)绿色汉化版 V2.85

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn