动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.10gRAC系列之10gRAC的网络设置.
.linux下的应用开发起步--简化蚂蚁.
.案例学习Oracle错误:ORA-00054.
.Oracle 10g DBMS_SCHEDULER的中度.
.如何在postfix中使用procmail.
.在Oracle 9i里基于函数的仅索引扫.
.10046event 漫步.
.如何在WINDOWS 2000将ORALCE完全.
.哈希分区表使用时注意事项.
.如何在Windows 2000下手工将Orac.
.Oracle 8i R2 (8.1.6) for Windo.
.Oracle 10g中SCN与TimeStamp的斗.
.Oracle高手必读,不要错过噢!.
.Oracle DBA 用户管理试题选.
.教你用Oracle解析函数快速检查序.
.如何防止某个关键文件被修改?.
.杜绝安全隐患 容易忽视的Oracle安.
.Oracle DBA 数据库结构试题选1.
.Oracle开发人员JDOM和XML分析 生.
.Oracle9iAS Containers for J2EE.

加速SQL查询的特征函数法

发表日期:2008-2-9 |



  1. 查询问题的挑战
  关系数据库的查询优化始终是一个重要而实际的问题,在那些以查询为主的应用系统中,这几乎是一个成败攸关的问题。 但迄今为止,关于这个问题的讨论中所提出的种种解决方案大致可分为两大类,即利用硬件体系结构上的优势及DBMS对并行处理的支持能力的一类方案及完全由应用设计来处理的方案。在本文作者以前所发表的文章中曾推荐过利用临时中介表和表更新方法和快查询处理的策略。在同一篇文章中,我们也曾提到有可能利用程序变换支持查询优化的想法。所有这些建议和想法都属于应用设计类的处理办法,这些方法从某种意义上说有一定的一般性。但是,实际应用不断地提出这样或那样难而“怪”的问题,这些问题极富挑战性,用常规方法往往要以很昂贵的系统资源为代价才有望解决。
  本文的目的是向读者介绍一种由E.Birger等人首先提出的方法,即加速查询处理的特征函数法。这个方法适用于大多数SQL的数据库系统,假如这类系统还包括为数不多的几个(最少为2个)内部函数,如abs()及sign()等,则这个方法就是直接可用的了。在E.Birger等人关于这个方法的研究报告中,曾给出很多极有难度而又很典型的查询要求及其求解办法,其中包括分技条件查询、求行内量的边界值、求直方图、表转置、求中位值、有序集的等段截分以及去边界值问题等。这些问题的共性是,若用常规方法求解,系统无论在存储开销上还是处理开销上都很大,而某些问题(如中值)的求解还相当难。本文将重述这些有趣的查询问题及其解决方案。同时,我们还将讨论“特征函数”作为一种使能技术的其他一些应用可能。
  
  2.特征函数及其表示
  特征函数是来自点集拓扑学的一个纯数学概念,集合S的特征函数定义如下:
  1 若x? S
  d s(x)= (0)
  0 若x? S
  
  在这里,任意元素x是否属于集合S,决定函数取不同的值。同时,这里也隐含了一个前提,即任何元素的集合S为范围的归属是完全确定的,不存在元素x的归属不明的情况。显而易见,特征函数是一种识别(或判定)装置。正是这一特性,使它能够成为数据库查询中选择准则的一种等价(和更有效的)替换成分。因此,我们说特征函数是加速查询的实施技术。
  
  为了更直接地针对数据库查询问题,我们将特征函数的一般形式变换成如下的“数据库版本”:
  1 若a=ture
  d (a)= (1)
  0 若a=false
  
  其中α是布尔表达式。当构成布尔表达式的算术表达式由表属性及数据库内部函数组成时,特征函数的选择作用就很清楚了。
  众所周知,一般关系数据库采用三值逻辑,即布尔表达式有可能取不确定值(“maybe”)。但为了简化表达并因此突出特征函数在加速查询中的本质作用,本文不考虑表属性取不确定值的情形。另外,实现特征函数的数据库(内部)函数(我们称之为特征函数的“元函数”)会因系统和我们主观选择上的不同而不同。例如,Sybase的Transact SQL有两个很有用的内部函数abs()和sign(),可以直接作为特征函数的元函数。若A和B是任意两个表属性,则
  d [A!=B]=abs(sign(A-B)) (2)
  为了使元函数有定义,表属性必须是数值变量。因此,除有非凡声明而外,本文将一概假定所有举例和一般性讨论中的表属性为非空数值变量。等式(2)可从元函数的定义
  abs(A)=|A| (3)
  -1 若A<0
  sign(A)= 0 若A=0 (4)
  +1 若A>0
  直接推导出来。一般地,经abs()和sign()而实现的特征函数是
  d [A=B]=1-abs(sign(A-B))
  d [A!=B]=abs(sign(A-B)) (5)
  d [A  d [A<=B]=sign(1-sign(A-B))
  d [A>B]=1-sign(1-sign(A-B))
  d [A>=B]=sign(1+sign(A-B)))
  此外,设α和b 是任意布尔表达式,则
  d [NOTα]=1-d [α]
  d [αANDb ]=d [α]*d [b ] (6)
  d [αOR b ]=sign(d [α]+d [b ])
  这里的A和B是表属性,为非空数值量。等式(5)给出了6个最简单的特征函数的元函数表示,但这并不是唯一的表示,还可能其他的表示方法。等式(6)是布尔算子的一般导出规则。对于由最简型式的关系表达式构成的布尔表达式而言,等式(5)和(6)就构成其特征函数的实现规则。对于一般布尔表达式,等式(5)和(6)也是导出其特征函数的基础。一般而言,由(5)和(6)可以推演出一个特征函数类,某些特征函数直接对应于SQL的选择算子。例如,形如d [A<=X<=B]的特征函数显然与判定变量X是否在闭区间[A,B]中有关。利用(5)中的第4个特征函数及(6)中的第2个导出规则,
  d [A<=X<=B]
  =d [(A<=X)AND(X<=B)]
  =d [A<=X]*d [X<=B]
  =sign(1-sign(A-X))*sign(1-sign(x-B)) (7)
  显而易见,等式(7)右端的区则算术表达式恰是选择算子BETWEEN的一种等价表达。可以仿照上述方法得到其他三个与区间值有关的特征函数,即δ[A  
  3. 实例分析
  为了说明以上引入的特征函数在加速查询处理中的作用,让我们具体分析一个实例。
  试考察一个描述学生收入状况的表 Students(name,status,parentincome,selfincome)(8)
  其中name是主键,属性status是一种标法量,当status取值1时,表明学生的收入完全来自父母,当status取值0时,表明学生的收入完全是自己劳动所得。针对这个表,假定我们想得到形如(name,income)的查询结果,其中income或为学生自己的收入(当相应的status取0值时)或是来自父母的收入(当相应的status取值为1时)。

  从表students的结构及查询结果的语义分析,完成查询的常规方法应当是
  SELECT name,income=parentincome
  FROM student
  WHERE student=1 UNION (9)
  SELECT name , income=selfincome
  FROM student
  WHERE student=0
  这是一个很自然、很直白的查询表达,但同时也是一个非常低效和非常耗费资源的表达。执行这个查询的一般过程是:首先分别执行由算子UNION所连结的两个子查询,然后产生一个存放查询中间结果的临时表并将两个子查询的结果存入以这个临时表中,第3步对临时表作排序以便消除可能存在的重复值。至此,才得到最终的查询结果。在这样的处理中,除对整个表students要遍历两次而且要对中间结果作排序处理,处理上的烦杂和资源的消耗都是显而易见的。查询(9)唯一的优点,是它表达上的自然直白,谁都想得到。
  对本例而言,还有更紧凑和更有效的查询表达。例如,不难验证以下的查询
  SEIECT name,income=parentincome*status+selfincome*(1-status)
  FROM students; (10)
  从语义上与查询(9)完全等价。但查询(10)不但消耗的存储少而且处理上要有效得多,因为它只遍历一次表students而且避免了可怕的排序操作。这个例子说明,对同一个查询结果,不同的查询表达在处理效率和资源消耗上可能会相去甚远。因此,寻求有效的查询表达方式,不但是必要的而且是可行的。
  查询表达(10)与像(9)那样的常规表达不同之处在于,后者的查询条件由两个WHERE子句和算子UNION显式给出,首者将查询条件间接地隐藏在SELECT子句的算术表达式中。无论查询表达采用什么形式,本例都属于“条件检索”的查询类型。假如对照一下查询要求和查询表达(10),不难发现只所以能给出如此简洁而正确的回签,实在是有点“事有凑巧”。假如问题稍作些许改变(例如,属性student取0和1以外的值,或者student取两个以上的标法值,如此等等)问题就不会这么简单了。因此,是否有一种很一般、很系统的解决方案,能让我们对任何显式表达在WHERE子句和相关算子中的选择条件找到与之语义等价的算术表达式?答案是肯定的,这就是我们在下面要介绍的“特征函数法”。
  
  4. 几个典型查询的特征函数解
  正如上面所讲,特征函数能够实现我们的愿望,即将显式的布尔条件转化为标量表达式。因此,特征函数最直接和简便的运用是针对条件检索型的查询,但它的作用并不仅仅止于此。为了较全面地了解特征函数在解决复杂查询中的作用,本节将由易到难介绍和分析若干典型实例。对某些实例,我们还将说明它的应用领域。为了表达上更紧凑,所有出现在标量表达式中的特征函数都没有用元函数展开。因此,假如要通过实际运行验证这里的实例,必须先借助于(5)、(6)替换这里的特征函数。
  
  4.1 条件检索
  由(10)给出的查询可借助于特征函数识为
  SELECT name,
  income=parentincome*d [status=1]+selfincome*d [status=0]
  FROM student (11)
  假如检索条件仅止于此,用(11)代替(10)并没有什么本质上的意义。但实际问题中的检索条件远比此处复杂而多样。例如,若将上例的要求稍作修改,即在保留status原有语义而外,加上按学生的年龄分段的要求,即以19岁和23岁为年龄的分界点,凡年龄不超过19岁而且依靠父母的学生为一组,凡年龄超过23岁者完全自食其力的学生为第二组,所有其他学生为第三组。在查询结果中,收入(income)一栏有不同的含义:对前两组学生,分别对应于他们父母的收入和学生自己的收入,对第三组学生,则对应于前两组学生收入的算术平均值。在习惯于用常规方法处理查询的人看来,这样的条件就显得大复杂了。实际上,这是很自然的要求,相对于原问题而言,要求的扩展是很稍微的。对照查询表达式(11),不难验证
  
  SELECT name,
  income=parentincome*d [atatus=1]*d [age<=19]+selfincome*sign (d [status=O]+d [age>23])+( (parentinceome+selfinco me)/2.0*(1一d [status=1])
上一篇:用PL/SQL产生随机数 人气:543
下一篇:教你学会truncate和delete的区别 人气:666
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-14 25175学生成绩管理系统 v2.88
2008-10-14 冰雪CMS v2.0 bulid 081013
2008-10-14 乐风CMS乐风影视版 v2008.10.13
2008-10-14 FeitecCMS 40T免费资源网整站源码
2008-10-14 Asoft签到管理系统 v3.0 Pack2
2008-10-14 金博人才招聘求职网黄金版 v4.2
2008-10-14 游戏推广无限制版本
2008-10-14 AmEav WebSite 业网站管理系统 英
2008-10-14 IdeaCMS企业网站系统
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成