问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何加快检索速度 sql server

发布网友 发布时间:2022-05-06 11:34

我来回答

1个回答

热心网友 时间:2022-05-06 13:04

如何提高SQL语言的查询效率?

由于SQL是面向结果而不是面向过程的查询语言,所以一般支持SQL语言的大型关系型数据库都使用一个基于查询成本的优化器,为即时查询提供一个最佳的执行策略。对于优化器,输入是一条查询语句,输出是一个执行策略。
一条SQL查询语句可以有多种执行策略,优化器将估计出全部执行方法中所需时间最少的所谓成本最低的那一种方法。所有优化都是基于用记所使用的查询语句中的where子句,优化器对where子句中的优化主要用搜索参数(Serach Argument)。

搜索参数的核心思想就是数据库使用表中字段的索引来查询数据,而不必直接查询记录中的数据。

带有 =、<、<=、>、>= 等操作符的条件语句可以直接使用索引,如下列是搜索参数:
emp_id = "10001" 或 salary > 3000 或 a =1 and c = 7

而下列则不是搜索参数:
salary = emp_salary 或 dep_id != 10 或 salary * 12 >= 3000 或 a=1 or c=7

应当尽可能提供一些冗余的搜索参数,使优化器有更多的选择余地。请看以下3种方法:

第一种方法:
select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (department.dep_code='01') and (employee.dep_code='01');

它的搜索分析结果如下:
Estimate 2 I/O operations
Scan department using primary key
for rows where dep_code equals '01'
Estimate getting here 1 times
Scan employee sequentially
Estimate getting here 5 times

第二种方法:
select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (department.dep_code='01');

它的搜索分析结果如下:
Estimate 2 I/O operations
Scan department using primary key
for rows where dep_code equals '01'
Estimate getting here 1 times
Scan employee sequentially
Estimate getting here 5 times

第一种方法与第二种运行效率相同,但第一种方法最好,因为它为优化器提供了更多的选择机会。

第三种方法:
select employee.emp_name,department.dep_name from department,employee where (employee.dep_id = department.dep_id) and (employee.dep_code='01');

这种方法最不好,因为它无法使用索引,也就是无法优化……

使用SQL语句时应注意以下几点:

1、避免使用不兼容的数据类型。例如,Float和Integer,Char和Varchar,Binary和Long Binary不兼容的。数据类型的不兼容可能使优化器无法执行一些本可以进行的优化操作。例如:

select emp_name form employee where salary > 3000;

在此语句中若salary是Float类型的,则优化器很难对其进行优化,因为3000是个整数,我们应在编程时使用3000.0而不要等运行时让DBMS进行转化。

2、尽量不要使用表达式,因它在编绎时是无法得到的,所以SQL只能使用其平均密度来估计将要命中的记录数。

3、避免对搜索参数使用其他的数学操作符。如:

select emp_name from employee where salary * 12 > 3000;

应改为:

select emp_name from employee where salary > 250;

4、避免使用 != 或 <> 等这样的操作符,因为它会使系统无法使用索引,而只能直接搜索表中的数据。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 桌面图标及字体太大,如何缩小比例。 会计和会计电算化有什么不同? manual怎么读 会计电算化用英语怎么说 多头绣花机英语怎么说 准确无误英语怎么说 “机考”英语怎么说? &quot;computer&quot;怎么读?是什么意思? acomputerized怎么读&gsadid=gad 五行金旺缺土,日主天干为金,必须有水助,但忌木太多。具体什么意思 起名要有土和水吗?解释一下吧,谢谢 五行起名:此命五行金旺缺土;日主天干为火;必须有土助,但忌金太多? 此命五行金旺缺土;日主天干为水;必须有木助,但忌火太多起名用什么属性的字啊 姓李五行旺金缺土,须有木相助,要起什么名字? 姓曾男孩,五行多金少土,如何取名?拜托帮忙。 我想给儿子起名,五行金旺缺土,找土字偏旁的字,姓:江。请内行人士给点意见谢谢 五行金旺缺土姓王1981年12月14生取什么名 苹果mp3 怎么充不上电? 如何在新安装固态硬盘中安装win7系统 如何从固态硬盘启动安装win7系统 怎么给固态硬盘安装win7系统 神探狄仁杰之神都龙王跳舞的舞曲叫什么名字那里可以听到全部 狄仁杰之神都龙王银睿姬回忆跳舞的曲子叫什么 狄仁杰之神都龙王中银睿姬跳舞的背景音乐叫什么名字,能提供免费下载网址或音乐文件也行,谢谢各位帅哥啦 日本本土舞蹈包括哪些舞蹈? 跳舞谁发明的?叫什么啊 傀儡舞是如何表演的? 风起洛阳佩娘第几集跳舞 李清照写的词。词牌( ) 名句( ) 李清照 词牌名有哪些,快快快 1、声声慢是词牌名,作者李清照。 2、声声慢是词牌名,作者是李清照。 李清照的《 》(词牌名)选自《漱玉词》 词牌名,李清照曾用该词牌填出《莫道不消魂,卷帘西风,人比黄花瘦》 李清照一首词的词牌名及内容? 李清照的词,争渡争渡惊起一滩鸥鹭全文 才下眉头,却上心头。来自李清照的哪首词? 李清照的词~急需!!!词牌名叫浣溪沙! 李清照的词的全部. 解释李清照的词 电动喷雾器马达有吸程吗? 12伏电动喷雾器电机能用18伏吗?