商务服务
数据库 SQL 查询技术的优化策略
2024-10-22 18:08
[摘要]在数据库系统中,数据查询是一项及其重要的操作。影响数据库系统性能的因素有很多,其中运用SQL语句的优劣对数据库系统的性能有直接的影响。优化的SQL语句能够提高数据库系统的性能,从而实现高效的查询,提高系统的可用性。

[关键词]SQL???? 查询?? 优化

一、引言
在数据库应用系统中,相对于数据库其它操作,查询操作是最为重要的一部分, 在系统开发过程中,若不注重SQL的查询策略,往往在刚开始应用时比较流畅,但随着数据库表中记录的日积月累数量越来越大,系统的响应速度越来越慢,甚至让人无法忍受 ,因此 ,查询优化也就有着非常重要的地位。科学合理地构造查询系统,是成功开发数据库应用系统非常重要的环节。据统计约有 90 %的性能问题是由于程序员或用户使用了不恰当的查询语句造成的,因此SQL语句的质量对整个系统效率有重大关系。
DBMS处理查询计划的过程是:做完查询语句的词法、语法检查之后,将语句提交给DBMS 的查询优化器,优化器做完代数优化和存取路径的优化之后。由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL 语句是系统优化的基础,因此用户所写语句的优劣至关重要。
二、优化方法
一个好的查询表达式不是基于纯粹的理论假设及谓词想像出来的,而是在实际的项目开发过程中总结的经验,本文就通过几个常用的查询优化方法,结合举例来说明SQL查询语句优化技术。
(一)合理建立和使用索引
索引是数据库中重要的数据结构,是优化的基础,建立索引的根本目的是提高查询效率,索引的使用要恰到好处,其使用原则如下
1.在经常进行连接的列上建立索引,而不经常连接的字段则由优化器自动生成索引
2.在频繁进行排序或分组的字段上建立索引
3.在条件表达式中经常在不同值较多的列上建立索引,在不同值少的列上不要建立索引,例如在人事信息表中的“党员”字段中,只有两个不同的逻辑值:.T.和.F.这两个值,所以就没有必要建立索引。
例如:两个表PEOPLE(编号,姓名,性别……)和WIFE(编号,姓名,性别….
命令SELECt PEOPLE.编号,PEOPLE.姓名,WIFE.编号,WIFE.姓名 FROM PEOPLE,WIFE WHERe PEOPLE.编号=WIFE.编号
这两个表要进行链接,就要在这两个表上以“编号”为字段建立索引。
(二)避免使用不兼容的数据
最微妙的查询问题之一就是在 WHERe 子句中,对具有不同类型的字段的比较,例如 FLOAT 与 INT ,CHAR 与 VARCHAR , BINARY 与 VARBINARY 是不兼容的,因此要求 WHERe 子句中表达式的数据类型是兼容的, 数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。
例如,对于SQL 语句
SEL ECT 姓名 FROM PEOPLE WHERe 月收入 >1500?
由于 WHERe 子句中, 字段月收入是货币型字段, 而1500是整型数, 优化器无法对其进行优化, 并且 DBMS 要耗费一定的时间将整型数1500转化成货币型字段后, 才能进行优化, 才能与字段月收入比较。为此, 在编程时可将整型数1500先转化成货币型字段, 而不要等到运行时由系统来转化,即语句改为
SEL ECT 姓名 FROM PEOPLE WHER 月收入 ≥$1500
(三)避免使用“<>”或“NOT”这样的操作符
“<>”是排斥性的操作符 ,而不是包括性的操作符 ,这会使系统无法使用索引 ,而只能直接搜索表中的数据 .
例如1:SELECt 姓名 FROM PEOPLE WHERe 月收入<>1500
2:SELECt姓名 FROM PEOPLE WHERe NOT(月收入=1500)
3: SELECt姓名 FROM PEOPLE WHERe 月收入>1500 OR 月收入<1500
从上面3个命令我们就可以看出第3个命令可以使用索引查询,它的查询速度是最快的。  
(四)避免对搜索参数使用其它操作符如数学、字符串函数等
例如:SELEC 姓名FROM? PEOPLE WHERe SUBSTr(姓名,1,2)=“李”
WHERe子句中对列的任何操作结果都是在 SQL语句运行时逐列计算得到的 ,因此它不得不进行表搜索 ,而没有使用该列上面的索引 . 因此将 SQL 语句重写成下面这样
SELEC姓名 FROM PEOPLE WHERe 姓名LIKE? ?“李%”
这样就提高了查询的速度。
(五)避免使用IN语句
当查询语句中有 IN 关键词时 ,优化器采用 OR并列条件。例如
SELECt 姓名 FROM PEOPLE WHERe 编号 IN (“1002”,”1004”)
数据库系统转化为
SELECt 姓名 FROM PEOPLE WHERe 编号=“1002”OR 编号=“1004”
在命令中,当可以使用IN或者EXIST时, EXISTS远比 IN 的效率高。在操作中如果把所有的 IN 操作符子查询改写为使用EXISTS的子查询 ,这样效率更高。同理 ,使用 NOT? EXIST代替NOT? IN会使查询添加限制条件 ,由此减少全表扫描次数 ,从而加快查询的速度以达到提高数据库运行效率。
(六)避免对查找条件使用各种运算符
对查询条件使用各种运算符,数据库系统在执行时,首先计算运算表达式的值,这样就影响系统的运算速度,例如
1)SELECt * FROM PEOPLE WHERe 月收入*12>24000
2) SELECt * FROM PEOPLE WHERe 月收入>2000
这两个命令的查询结果是一样的,但是第一条命令首先计算表达式的值,然后再参与查询,而第二条命令则是直接查询,查询效率明显比第一条命令高。
三、结束语
编写优劣SQL语句是提高影响数据库系统的重要因素,对于数据库系统,不是仅仅实现功能即可,还要追求起执行的效率,在本文中,说明了在查询中编写SQL语句应该注意的问题,在大多数的情况下,需要反复试验不同的SQL语句才能得到最佳的方案。

    以上就是本篇文章【数据库 SQL 查询技术的优化策略】的全部内容了,欢迎阅览 ! 文章地址:http://yy520w.xhstdz.com/news/4040.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 物流园移动站 http://mip.xhstdz.com/ , 查看更多   
最新新闻
莒县天气预报
莒县旅游攻略指南? 携程攻略社区! 靠谱的旅游攻略平台,最佳的莒县自助游、自由行、自驾游、跟团旅线路,海量莒县旅游景点图片、
2024年5月GRE考试时间
  GRE 考试作为全球广泛认可的研究生入学考试,对于想要申请国外研究生院的学生来说至关重要。本文将为大家详细介绍 2024 年 5
全民领主:我的天赋是战棋
【领主+塔防+诸天万界】在这个辉煌的世界,无尽虚空承载着所有的希望和绝望,唯有领主能高举其上,寻遍诸天万界,凝练一缕道则化
叶嘉莹谈“赋比兴”
你要知道我们中国诗歌,最早的源头,一定是《诗经》。《诗经》,我们都讲,有赋,有比,有兴,是不是?最古老的《诗经》的赋、比
以吾辈之微光,汇时代之骄阳
1921年,在嘉兴南湖上的一叶红船上,一群平均年龄只有28岁的中国青年点燃了革命火种。从此,星星之火,燎原神州。4月16日,神州
青浦翡翠免费估价在线免费鉴定估价
青浦翡翠免费估价 在线免费鉴定估价作为哲学思想三教融合后期发展阶段的重要实物,以宋代造像为主体的大足石刻,是佛教从世俗性
来徽州 上春山 | 春有约 茶不误!来自中国红茶之乡的春日邀约,请“茶”收! | 春游江淮
来徽州 上春山 | 春有约 茶不误!来自中国红茶之乡的春日邀约,请“茶”收! | 春游江淮 春到祁门,茶香四溢。以茶待友,共话祁
中国云南昆明市西苑茶城
中国云南昆明市西苑茶城位于昆明市,靠近上锦路、华苑巷、马街北路和华苑路。在公共交通方面,附近设有多个公交站,包括上锦路、
吴韵越风,茶旅江南
今年3月22日是世界第17个水日,主题为“跨界水——共享的水,共享的机遇。”在这个具有特殊意义的日子里,几位远涉重洋的欧美茶
数据库 SQL 查询技术的优化策略
[摘要]在数据库系统中,数据查询是一项及其重要的操作。影响数据库系统性能的因素有很多,其中运用SQL语句的优劣对
本企业新闻