当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server数据库查询优化的常用方法总结

MSSQL
在SQL Server下数据库链接的使用
SQL Server数据库中处理空值时常见问题
巧用一条SQL语句实现其它进制到十进制转换
通过JDBC连接DB2数据库技巧
深入浅出SQL教程之嵌套SELECT语句
SQL Server备份文件中导入现存数据库
SQL多表格查询合并至单一声明的常用方式
也谈如何缩小SQL SERVER日志文件
四个语句帮你提高 SQL Server 的伸缩性
用JavaBean编写SQL Server数据库连接类
sql2k中新增加的Function的sqlbook 的帮助
Mssql处理孤立用户的存储过程
探讨SQL Server中Case 的不同用法
快速清除SQLServer日志的两种方法
解决Sql Server警报的疑难问题
MySQL的数据类型和建库策略
SQL SERVER应用问题解答13例(一)
SQL SERVER应用问题解答13例(二)
多种还原.bak数据库文件方式
SQL语句中的一些特殊参数如何用变量来代替

MSSQL 中的 SQL Server数据库查询优化的常用方法总结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 155 ::
收藏到网摘: n/a

SQL Server数据库查询优化的常用方法总结:

本文中,abigale代表查询字符串,ada代表数据表名,alice代表字段名。

技巧一:

问题类型:ACCESS数据库字段中含有日文片假名或其它不明字符时查询会提示内存溢出。

解决方法:修改查询语句

技巧二:

问题类型:如何用简易的办法实现类似百度的多关键词查询(多关键词用空格或其它符号间隔)。

解决方法:

以下为引用的内容:

'//用空格分割查询字符串
ck=split(abigale," ")
'//得到分割后的数量
sck=UBound(ck)

sql="select * ada where"

在一个字段中查询

以下为引用的内容:
For i = 0 To sck
SQL = SQL & tempJoinWord & "(" & _
"alice like '"&ck(i)&"%')"
tempJoinWord = " and "
Next

在二个字段中同时查询

以下为引用的内容:
For i = 0 To sck
SQL = SQL & tempJoinWord & "(" & _
"alice like '"&ck(i)&"%' or " & _
"alice1 like '"&ck(i)&"%')"
tempJoinabigale = " and "
Next

技巧三:提高查询效率的几种技巧

1. 尽量不要使用 or,使用or会引起全表扫描,将大大降低查询效率。

2. 经过实践验证,charindex()并不比前面加%的like更能提高查询效率,并且charindex()会使索引失去作用(指sqlserver数据库)

3. alice like '%"&abigale&"%' 会使索引不起作用

like '"&abigale&"%' 会使索引起作用(去掉前面的%符号)

(指sqlserver数据库)

4. '%"&abigale&"%' 与'"&abigale&"%' 在查询时的区别:

比如你的字段内容为:斯卡布罗集市

'%"&abigale&"%' :会通配所有字符串,不论查“集市”还是查“斯卡”,都会显示结果。

'"&abigale&"%' :只通配前面的字符串,例如查“集市”是没有结果的,只有查“斯卡”,才会显示结果。

5. 字段提取要按照“需多少、提多少”的原则,避免“select *”,尽量使用“select 字段1,字段2,字段3........”。实践证明:每少提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。

6. order by按聚集索引列排序效率最高。一个sqlserver数据表只能建立一个聚集索引,一般默认为ID,也可以改为其它的字段。

7. 为你的表建立适当的索引,建立索引可以使你的查询速度提高几十几百倍。(指sqlserver数据库)

以下是建立索引与不建立索引的一个查询效率分析:

Sqlserver索引与查询效率分析。

表 News

字段

Id:自动编号

Title:文章标题

Author:作者

Content:内容

Star:优先级

Addtime:时间

记录:100万条

测试机器:P4 2.8/1G内存/IDE硬盘

方案1:

主键Id,默认为聚集索引,不建立其它非聚集索引

以下为引用的内容:
select * from News where Title like '%"&abigale&"%'
or Author like '%"&abigale&"%' order by Id desc

从字段Title和Author中模糊检索,按Id排序

查询时间:50秒

方案2:

主键Id,默认为聚集索引

在Title、Author、Star上建立非聚集索引

以下为引用的内容:
select * from News where Title like '"&abigale&"%'
or Author like '"&abigale&"%' order by Id desc

从字段Title和Author中模糊检索,按Id排序

查询时间:2 - 2.5秒

方案3:

主键Id,默认为聚集索引

在Title、Author、Star上建立非聚集索引

以下为引用的内容:
select * from News where Title like '"&abigale&"%'
or Author like '"&abigale&"%' order by Star desc

从字段Title和Author中模糊检索,按Star排序

查询时间:2 秒

方案4:

主键Id,默认为聚集索引

在Title、Author、Star上建立非聚集索引

以下为引用的内容:
select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%'

从字段Title和Author中模糊检索,不排序查询时间:1.8 - 2 秒

方案5:

主键Id,默认为聚集索引

在Title、Author、Star上建立非聚集索引

以下为引用的内容:
select * from News where Title like '"&abigale&"%'

select * from News where Author like '"&abigale&"%'

从字段Title 或 Author中检索,不排序查询时间:1秒