- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于关系数据库SQL查询语句执行过程效率分析与对策
基于关系数据库SQL查询语句执行过程效率分析与对策
[摘要]基于关系数据库的标准查询语言SQL在数据库系统中被广泛使用,在使用SQL查询和检索数据时往往只注重正确性,忽略其效率性。从SQL查询语句执行过程入手,先解析执行过程,然后根据执行过程提出优化策略,使其在正确前提下,提高其运行效率。
[关键词]关系数据库SQL查询对策
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1210080-01
在各类大型应用软件的数据库中,都存在大量的数据信息和记录,经常要对它们进行各种数据操作。SQL(Structrued Query Language)作为结构化查询语言,是大型计算机操作关系数据库的标准查询语言,同时也广泛地应用到小型计算机的数据库管理系统中。它是一种高度非过程化的语言,即只要用户按其语法规则写出符合操作要求的语句,而并不需要告诉系统应如何执行SQL语句,就可得到所要求的结果。随着数据库技术的广泛应用,在数据库程序的开发过程中,大量的工作是要进行数据查询和检索处理。本文从SQL查询语句执行的过程入手,对其执行效率进行分析,并给出参考性建议和优化策略。
一、SQL语句执行过程解析
在平时书写SQL查询语句时,虽然每个人的写法不尽相同,而且有时个别子句顺序并不影响操作结果,但是在各种数据库管理系统中,标准的SQL的解析顺序为:
1.FROM子句,组装来自不同数据源的数据;
2.WHERE子句,基于指定的条件对记录进行筛选;
3.GROUP BY子句,将数据划分为多个分组;
4.使用聚合函数进行计算;
5.使用HAVING子句筛选分组;
6.计算所有的表达式;
7.使用ORDER BY对结果集进行排序。
通过以上SQL语句的解析过程,我们可以对SQL查询语句进行优化处理。SQL查询语句的核心结构是SELECT…FROM…WHERE,了解了这个基本结构,我们可以从以下几个方面对其进行优化处理。
二、效率分析及优化对策
(一)从From子句入手
From子句后面接单表或者多表,通常情况下接受来自不同数据源的多表。如果是单表,一般情况下对表进行快速全表扫描。如果是多表的情况,查询设计优化器将采取自右向左的顺序依次读取数据表。如以下语句:“From table1,table2,table3”,优化器将优先读取table3表,然后是table2表,最后是table1表。在进行From子句的多表连接时,就需要结合条件子句WHERE进行分析,需要遵循下面的规则:1. 当WHERE后面接的条件能够一次性过滤某个表的大量记录时,应优先处理该表。2. 如果WHERE后面接的条件不能过滤掉大量记录时应该优先考虑处理记录数最少或者索引关键值最少的表。
(二)从条件子句WHERE入手
WHERE子句后面通常接过滤条件,对表的记录进行筛选,筛选出符合条件的记录。如果SELECT查询语句没有WHERE子句,则无须对表记录进行过滤。若后面接单个表,则通常顺序扫描全表。若后接多表或者大量记录表时,则可以考虑用索引来减少查询的时间。所以在查询前可对各个表建立比较的索引。对WHERE子句中出现的条件,可以依据以下原则首先来驱动查询。
(1)建立索引字段的列比没有建立索引的要快;(2)主索引要比普通索引快;(3)单索引要比符合索引快;(4)有条件约束要比没有条件约束要快。
此外,WHERE子句通常采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。根据以上原则,我们可以判断出以下四个语句中哪个选项语句效率最高。
Select * Frommobilewhere (mobileno andbegINtime
{^2009-1-308:20:11} andbegintime{^2009-1-30 8:20:11}
C) SELECT*Frommobilewherebegintime
{^2009-1-308:20:11}and(mobileno)
很显然,综合以上原则C选项效率最高。
(三)从GROUP BY和HAVING子句入手
在SELECT语句中,GROUP BY语句的作用是对记录进行分组(划分成较小的组),使用聚合函数返回每一个组的汇总信息,而HAVING子句限制返回的结果集。在一个SQL语句中可以有WHERE子句和HAVING子句。HAVING与WHERE子句类似,均用于设置限定条件。
原创力文档


文档评论(0)