关系数据库有哪些优化技术,帝国全面战争优化些!?

您的位置: >>
今天我们要讨论的是关系型数据库性能优化的问题,平时我们也最好要遵守一定的规则,希望对大家有所帮助。
  对于web应用开发,多数性能瓶颈均出现在数据库上,除了采用分布式架构或云处理(大公司基本上都是),更重要的是平时程序设计时要遵照一些规则,从根本上提高系统的性能,以下总结了一些常用的规则方法,仅供参考,欢迎跟帖补充。。。
  1、&把数据、日志、索引放到不同的I/O设备上,增加读取速度。数据量(尺寸)越大,提高I/O越重要。
  2、&纵向、横向分割表,减少表的尺寸,如:可以把大数据量的字段拆分表。
  3、&根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,尽量使用字节数小的列建索引,不要对有限的几个值的列建单一索引。
  4、&用OR的字句可以分解成多个查询,并且通过UNION链接多个查询。它们的速度只与是否使用索引有关,如果查询需要用到联合索引,用UNION all执行的效率更高。
  5、&在查询SELECT语句中用WHERE子句限制返回的行数,避免表扫描。如果返回不必要的数据,则浪费了服务器的I/O资源,加重了网络的负担,降低了性能。如果表很大,在表扫描期间将表锁住,禁止其他的联结访问表,后果很严重。
  6、&注意使用DISTINCT,在没有必要时不要用,它同UNION一样会使查询变慢。
  7、&在IN后面值的列表中,将出现最频繁的值放在最前面,出现最少的放在最后面,减少判断的次数。
  8、&一般在GROUP BY和HAVING子句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作,也就是说尽可能在WHERE中过滤数据。
  9、&尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译、优化过,并且被组织到一个执行规划里,且存储在数据库中的SQL语句(存储过程是数据库服务器端的一段程序),是控制流语言的集合,速度当然快。
  10、不要在一句话里再三地使用相同的函数,浪费资源,将结果放在变量里再调用更快。
  11、针对大量只读查询操作进行优化的方法:
1)数据量小的数据,可以考虑不存储在数据库中,而是通过程序常量的方式解决。
2)需要存储在数据库中的数据,可以考虑采用物化视图(索引视图)。当DBA在视图上创建索引时,这个视图就被物化(执行)了,并且结果集被永久地保存在唯一索引中,保存方式与一个有聚簇索引的表的保存方式相同。物化视图减除了为引用视图的查询动态建立结果集的开销,优化人员可以在查询中使用视图索引,而不需要在FROM子句中直接指定视图。
3)数据存储时可以考虑适当的数据冗余,以减少数据库表之间的链接操作,提高查询效率。
4)针对数据的特点,采取特定的索引类型。例如,位图索引等。
  12、对于SQL语句书写时的一些建议:
1)写语句时能够确定数据库对象所有者的,尽可能把所有者带上,如:
SELECT * FROM dbo.Users
2)存储过程中,参数定义最好放在最前面,尽可能一次定义,如:
DECLARE @USER_ID&INT
&&&&&& ,@USER_NAME&& VARCHAR(50)
&&&&&& ,@PASSWORD VARCHAR(50)
3)为参数赋值时,尽可能一次赋值,如:
SELECT @USER_ID = 1001
&&&&&& ,@USER_NAME = 'xiaojun.liu'
4)尽量少用游标
数据库热门文章
数据库最新文章关系数据库查询处理步骤
查询处理的四个步骤:
1.查询分析
分析时主要进行词法和语法分析。
首先对整条sql语句进行扫描,根据数据库数据字典中的数据标记,识别出sql的关键字、关系名和属性名等词组,检查是否存在词法错误。完成后检查语句排列是否符合语法规则,如果符合的话进入下一环节,否则直接报错。
2.查询检查
检查主要包括语义检查和完整性检查。
sql的基本分析流程和编译器的分析流程是相似的,只不过多加了sql特殊的检查。
语义分析时,根据数据字典定义的数据库对象名、关系名、属性名和视图、过程和函数等数据库建造者自定义的名称检查词法分析中的&词&,检验词是否存在和有效。同时,对于视图操作,需要将对视图的操作转换为对基本表的操作。
完整性检查主要是检查用户的权限能力,如果用户没有权限或是权限不够就拒绝执行语句。
查询检查之后sql语句将转换为对应的关系代数表达式。
检索学习课程号为C2的学生学号与成绩&
SELECT SNO,GRADE
WHERE CNO='C2'
关系代数表达式:
& SNO, GRADE (& CNO='C2' (SC))
3.查询优化
每个查询都会有执行策略和操作算法,查询优化就是根据数据库和sql语句选择最好的查询方式。一般的查询优化有两种:代数优化和物理优化。
4.查询执行
优化器根据优化策略生成查询执行计划,代码生成器将执行计划编译和执行,并返回结果。
整个过程的流程图如下:
关系数据库优化的方式
sql语句执行完查询检查后得到查询树,也就是关系代数表达式,代数优化就是等价变换关系代数表达式,以此来提高查询效率。
代数优化的原则
先做选择和投影
预处理连接操作
投影结合双目运算
选择结合笛卡尔乘积
找出公共子表达式
1.先做选择和投影
在进行sql语句查询的时候必须先做选择操作,确定操作对象,如果sql语句中同时还有投影操作也一起进行,投影操作其实也可以看做是一种选择操作,为了避免重复扫描sql语句,投影和选择同时进行。
2.预处理连接操作
连接操作是非常大的消耗,为了加快连接操作,可以对数据建立索引或排序。
3.投影结合双目运算
投影操作结合之前或之后的双目元素,没有必要为了去掉某些字段二扫描一遍关系。
单目运算时对一个关系施加的运算。双目运算是对两个关系时间的运算。
选择、投影是单目运算符,连接和笛卡尔乘积是双目运算符。
4.选择结合笛卡尔运算
把选择操作结合笛卡尔运算形成连接运算,连接运算(特别是等值连接)比笛卡尔乘积要省很多时间。
5.找出公共子表达式
就是先计算大家都会用到表达式结果,减少重复计算。
第3和4条说白了就是将单目运算想尽办法结合双目运算,单目运算有选择和投影,选择是根据条件选择符合条件的选项,投影是筛选数据的属性。投影可以结合连接或笛卡尔乘积,先将两张表合成一张表在筛选属性。选择只需要结合笛卡尔乘积,因为连接本来就是选择后的结果,不需要在选择了。
关系代数优化步骤
构造查询树
规则变换查询树
1.构造查询树
将sql语句中的关键字变换成关系代数运算符,以下是对应关系:
where-选择运算-&
select-投影运算-&
from-笛卡尔乘积-&
然后构造树形结构,叶子节点表示关系,内部节点代数操作。自底向上进行查询操作。
代数优化仅仅是改变查询语句中的操作的次序和组合,不涉及底层的存取路径,应对小的数据库还可以,但是对于大型数据库还需要数据存取优化,所以就发展了物理优化,选择高效合理的操作算法和存取路径。
物理优化的三种优化算法:
基于规则的启发式优化
基于代价估算的优化
两者结合的优化
1.基于规则的启发式操作
&选择操作启发规则
&连接操作的启发式规则
选择操作的启发式规则:
对于小关系,使用全表顺序扫描,即使选择列上有索引&对于大关系,启发式规则有:
对于选择条件是主码=值的查询
查询结果最多是一个元组,可以选择主码索引&一般的RDBMS会自动建立主码索引。
对于选择条件是非主属性=值的查询,并且选择列上有索引&
要估算查询结果的元组数目,如果比例较小(&10%)可以使用索引扫描方法&否则还是使用全表顺序扫描
对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引&
要估算查询结果的元组数目,如果比例较小(&10%)可以使用索引扫描方法&否则还是使用全表顺序扫描。
连接操作的启发式规则:
对于用AND连接的合取选择条件
如果有涉及这些属性的组合索引,优先采用组合索引扫描方法&如果某些属性上有一般的索引,则可以前四种扫描方法&否则使用全表顺序扫描。
对于用OR连接的析取选择条件
一般使用全表顺序扫描
基于启发的优化方法实现简单并且优化代价较小,适合解释执行的系统。(关于解释执行和编译执行和编译器的链接:http://lavasoft./)
但是对于编译执行的系统则不适用。
2.基于代价估算的优化
基于代价的优化方法要计算各种操作算法的执行代价,与数据库的状态密切相关。
数据字典中存储的优化器需要的统计信息:&1. 对每个基本表: 该表的元组总数(N)&元组长度(l)&占用的块数(B)&占用的溢出块数(BO)
2.每个表的基本列
该列不同值的个数(m)&
选择率(f)&如果不同值的分布是均匀的,f=1/m&如果不同值的分布不均匀,则每个值的选择率=具有该值的元组数/N&该列最大值&该列最小值&该列上是否已经建立了索引&索引类型(B+树索引、Hash索引、聚集索引)&3. 对索引(如B+树索引)&索引的层数(L)&不同索引值的个数&索引的选择基数S(有S个元组具有某个索引值)&索引的叶结点数(Y)
阅读(...) 评论()数据库期末考试复习题及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数据库期末考试复习题及答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩25页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢关系数据库SQL查询语句的优化
关系数据库SQL查询语句的优化
———《数据库原理与应用》课程教学研究&
摘要:优化查询有助于提高SQL的检索速度,是一种提高应用系统性能的重要方式。对SQL查询的优化方案主要从优化原理、视图、WHERE 子句、存储过程等,并结合实例阐明和验证。对优化查询的掌握,可使学生在数据库应用程序设计方面的课程中更能得心应手。关键字:优化查询;SQL查询;关系数据库&&&&&&& 数据库查询操作是数据库操作的核心操作,对数据的查询效率及处理速度已成为衡量数据库性能的一个重要指标。数据库查询技术也是学生对《数据库原理与应用》这门课程所必须掌握的知识和技能,数据库查询技术的精通也为以后课程的学习(如:C#.NET程序设计)中的数据库应用程序的设计打下良好的基础。为了优化数据库的性能,简单、有效的方法就是优化查询。&&&&&&& 1优化原理和实质数据查询处理的代价通常取决于对磁盘的访问,因为磁盘比内存的访问速度要慢。对于一个给定的查询,有许多可能的处理策略,复杂查询更是如此[1]。查询优化的实质是在结果正确的前提下,找出与已有表达式等价,但查询效率更高的表达式。&&&&&&& 2在教学中要注重的几种典型的优化方法&&&&&&& 2.1 建立视图&&&&&&& 视图可简化用户操作数据的方式,使用户能着重于所感兴趣的特定数据和所负责的特定任务。如果该视图数据规模小于定义的基本表,则基于视图的查询比原查询的速会快得多。例:要查询每门课程成绩最高的学生的学号SELECT 学号,课程号,成绩FROM 成绩表AWHERE 成绩=(SELECT MAX(成绩)FROM 成绩表BWHERE A..课程号=B.课程号)语句缺点:这属嵌套查询,子查询的结果集将作为外层查询的条件,查询效率不高。解决方案:可先建立视图,求得每门课程的最高分,再与成绩表中比较,获取与视图中最高分数据相等的记录,这就减少了内层连接的数据量,从而提高了检索速度。用SQL语句优化的步骤为:&&&&&&& 首先,创建视图GREATE VIEW V_max_cnoscore ASSELECT 课程号,Max(成绩) AS 最高分数FROM 成绩表GROUP BY 课程号其次,利用视图检索数据SELECT 学号,A.课程号,A.成绩FROM 成绩表A,&&&&&&& V_max_cnoscore BWHERE A.成绩=B.最高分数AND A.课程号=B.课程号&&&&&&& 2.2 查询条件Where 子句的优化&&&&&&& 2.2.1 合理设置WHERE 条件的先后顺序。多数数据库都是按从左到右的顺序处理条件,把能过滤更多数据的条件放在前面,过滤少的放后面,便可提高检索速度。例:SELECT * FROM studentWHERE ssex=’女’ -- 条件1过滤的数据较少AND sdept=’计算机系’ -- 条件2 过滤数据比条件1 多上面的SQL就不符合上述原则,可改为:SELECT * FROM studentWHERE sdept=’计算机系’AND ssex=’女’对同一表格进行多个选择运算,选择条件的排序对性能有较大影响,不仅影响索引的选取,而且关系到临时表的大小[2]。因此,要提高查询速度,可将较严格的条件写在前面,较弱的放在后面。&&&&&&& 2.2.2 避免使用“& &”或“NOT”操作符。
“& &”或“NOT”均属于排斥性操作符,不是包括性操作符,这会使系统在搜索数据时无法使用索引,只能直接搜索表中的数据,例:&&&&&&& (1)SELECT 学号FROM 成绩表WHERE 成绩& &80&&&&&&& (2)SELECT 学号FROM 成绩表WHERE NOT(成绩&&80)&&&&&&& (3)SELECT 学号FROM 成绩表WHERE 成绩& 80 OR成绩&80比较以上三条语句,可知第3 条可使用索引查询,它的查询速度最快。&&&&&&& 2.2.3恰当运用“OR 扩展”技术。该技术是把在Where 子句中带有OR的查询转换成包含多个UNION ALL的查询。例:查询计算机系县年龄不大于20 岁的学生。&&&&&&& 常规的SQL语句:SELECT 学号,姓名FROM 学生表WHERE 系名=’计算机系’ OR 年龄&=20假定表中“系名”和“年龄”两个字段上创建了索引,以上的查询可能不会使查询优化器使用索引,从而查询效率降低,可改进为:SELECT 学号,姓名FROM 学生表WHERE 系名=' 计算机系'UNION ALL SELECT 学号,姓名FROM 学生表WHERE 年龄&=20&&&&&&& 2.2.4 合理减少LIKE条件的使用。在SQL查询中,LIKE 条件使用的神奇之处在于其与通配符匹配所提供的模糊查询功能。但在字符串的比较中,有时大量字符的逐个比较,也会大大降低查找效率。例:图书按26 个英文字母分为26 类,查找所有属于'A’类图书的销售金额。SELECT 图书类号, SUM (数量*单价) FROM 销售WHERE 图书类号LIKE′A%′GROUP BY图书类号优化为精确查询:SELECT 图书类号,SUM(数量*单价) FROM销售WHERE 图书类号&=′A′AND 图书类号&′B′GROUP BY图书类号&&&&&&& 2.3 正确使用子查询“展平”技术子查询“展平”技术就是指将子查询转变为半连接,连接或者反连接,从而将查询优化。例:找出成绩大于等于90 分的学生的姓名。SELECT 姓名FROM 学生表WHERE 学号IN(SELECT 学号FROM 成绩表WHERE 成绩&=90)语句缺点:需要搜索学生表的每一行,来查找所有满足子查询条件的记录。&&&&&&& 解决方案:将学生表作为连接的内表,查询将作为通常的连接来执行。&&&&&&& 优化后的SQL语句:SELECT 姓名FROM (SELECT 学号FROM 成绩表WHERE 成绩&=90) A,学生表B WHERE A. 学号=B.学号&&&&&&& 2.4 善于使用存储过程&&&&&&& 存储过程是SQL 语句和可选控制流语句的预编译集合,一个名称存储并作为一个单元处理。善于使用存储过程,将使SQL变得更加灵活和高效。&&&&&&& 例:查询某个学生某门课程的考试成绩,列出学生的姓名、&&&&&&& 课程名及成绩CREATE PROC pro_student_degree@stu_name char(12),@course_name char(18) ASSELECT sname,cname,degreeFROM student A INNER JOIN sc B ON A.sno=B.snoINNER JOIN course C oWHERE sname=@stu_name AND cname=@course_name以上是一个带有两个输入参数的简单存储过程,只需执行一个简单的SQL语句———“EXEC pro_student_degre'e 刘娜’,’数据库原理’”就可完成查询。&&&&&&& 编写性能优化的SQL 语句是提高数据库系统的重要因素,随着数据库管理系统中数据量的增大,如何提高查询速度与效率也是计算机软件开发的一个时代要求。实现优化查询的方法很多,在使用中,要根据具体情况权衡利弊,使数据库查询性能最优。
发表评论:
TA的推荐TA的最新馆藏[转]&[转]&[转]&[转]&关系数据库的查询优化技术--《软件导刊》2007年01期
关系数据库的查询优化技术
【摘要】:在多数数据库应用系统中,查询操作是各类操作中所占比例最大的,其效率的高低直接关系到应用系统性能的好坏。通过部分实例阐述了关系数据库查询优化的实现途径和实现方法。
【作者单位】:
【关键词】:
【分类号】:TP311.132【正文快照】:
0前言开发数据库应用程序时,许多开发人员过分注重用户界面华丽的外观,却忽视查询效率的问题,导致开发出来的应用系统效率低下,资源严重浪费。在一般应用系统中,要使用数据必须先查到数据,因此,提高查询速度是十分重要的工作。当系统数据库的数据量比较大时,通过查询
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【相似文献】
中国期刊全文数据库
仲萃豪;;[J];计算机研究与发展;1981年04期
杨容,高庆狮;[J];计算机研究与发展;1983年07期
施伯乐;[J];计算机应用与软件;1984年01期
徐国定;[J];华东师范大学学报(自然科学版);1985年03期
周修廉;;[J];哈尔滨理工大学学报;1985年S1期
林中尧;田秀云;郑光明;;[J];应用科技;1985年02期
,周丽佩;[J];大庆石油学院学报;1986年01期
朱丹丽,许丽华;[J];工矿自动化;1986年04期
黎仁蔚;;[J];东南大学学报(自然科学版);1986年04期
孟力明;胡铭曾;;[J];计算机研究与发展;1986年01期
中国重要会议论文全文数据库
宋子齐;谭成仟;李锐坚;;[A];1994年中国地球物理学会第十届学术年会论文集[C];1994年
马建军;陈文伟;;[A];1996中国控制与决策学术年会论文集[C];1996年
郑致平;;[A];中国土木工程学会计算机应用学会学术报告会论文集(4)[C];1989年
黄志伟;郭秀玲;保轶;;[A];中国土木工程学会计算机应用分会第七届年会土木工程计算机应用文集[C];1999年
崔信民;彭海鹰;;[A];中国土木工程学会市政工程分会1999年学术交流会论文集[C];1999年
赵岚;胡九川;;[A];模糊集理论与模糊应用专辑——中国系统工程学会模糊数学与模糊系统委员会第十届年会论文选集[C];2000年
贾盛举;陈鹰;;[A];中国图象图形学会第十届全国图像图形学术会议(CIG’2001)和第一届全国虚拟现实技术研讨会(CVR’2001)论文集[C];2001年
陈元;;[A];2001中国控制与决策学术年会论文集[C];2001年
刘永禄;;[A];2002航海实用新技术论文集[C];2002年
金建华;窦丽华;陈杰;;[A];2002中国控制与决策学术年会论文集[C];2002年
中国重要报纸全文数据库
杜荣华;[N];中国计算机报;2000年
;[N];计算机世界;2000年
万其鸣;[N];计算机世界;2000年
张然;[N];市场报;2000年
周蕾;[N];网络世界;2000年
中国科学院地理信息产业发展中心工程部主任
梁军;[N];中国计算机报;2001年
周锦鸾;[N];中国计算机报;2001年
仝仁;[N];中国计算机报;2001年
孙志永;[N];中国计算机报;2001年
东软集团有限公司中间件技术分公司总经理
张霞;[N];科技日报;2001年
中国博士学位论文全文数据库
王保保;[D];西安电子科技大学;2000年
罗德安;[D];西南交通大学;2001年
胥正川;[D];复旦大学;2003年
陆静平;[D];重庆大学;2003年
郭志懋;[D];复旦大学;2005年
高鹏;[D];浙江大学;2005年
梁平;[D];合肥工业大学;2006年
秦杰;[D];国防科学技术大学;2005年
孙伟;[D];哈尔滨工程大学;2006年
赵雷;[D];苏州大学;2006年
中国硕士学位论文全文数据库
蒋运承;[D];广西师范大学;2000年
赵再兴;[D];北京工业大学;2000年
邱建民;[D];北京工业大学;2000年
郭力萍;[D];华北电力大学;2001年
王丽佳;[D];大连理工大学;2002年
李由;[D];国防科学技术大学;2002年
吴长中;[D];国防科学技术大学;2002年
李季;[D];重庆大学;2002年
任昌荣;[D];大连理工大学;2003年
刘琴;[D];河海大学;2003年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 大众知识服务
出版物经营许可证 新出发京批字第直0595号
订购热线:400-819-82499
服务热线:010--
在线咨询:
传真:010-
京公网安备75号

我要回帖

更多关于 帝国全面战争优化补丁 的文章

 

随机推荐