SQL Server数据库查询优化常用方法总结
2008-09-02 09:59:15 来源:WEB开发网技巧一:
问题类型:ACCESS数据库字段中含有日文片假名或其它不明字符时查询会提示内存溢出。
解决方法:修改查询语句
sql="select*fromadawherealicelike’%"&abigale&"%’" |
改为
sql="select*fromada" rs.filter="alicelike’%"&abigale&"%’" |
技巧二:
问题类型:如何用简易的办法实现类似百度的多关键词查询(多关键词用空格或其它符号间隔)。
解决方法:
’//用空格分割查询字符串 ck=split(abigale,"") ’//得到分割后的数量 sck=UBound(ck) sql="select*adawhere" |
在一个字段中查询
Fori=0Tosck SQL=SQL&tempjoinWord&"("&_ "alicelike’"&ck(i)&"%’)" tempjoinWord="and" Next |
在二个字段中同时查询
Fori=0Tosck SQL=SQL&tempjoinWord&"("&_ "alicelike’"&ck(i)&"%’or"&_ "alice1like’"&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*fromNewswhereTitlelike’%"&abigale&"%’ orAuthorlike’%"&abigale&"%’orderbyIddesc |
从字段Title和Author中模糊检索,按Id排序
查询时间:50秒
方案2:
主键Id,默认为聚集索引
在Title、Author、Star上建立非聚集索引
select*fromNewswhereTitlelike’"&abigale&"%’ orAuthorlike’"&abigale&"%’orderbyIddesc |
从字段Title和Author中模糊检索,按Id排序
查询时间:2 - 2.5秒
方案3:
主键Id,默认为聚集索引
在Title、Author、Star上建立非聚集索引
select*fromNewswhereTitlelike’"&abigale&"%’ orAuthorlike’"&abigale&"%’orderbyStardesc |
从字段Title和Author中模糊检索,按Star排序
查询时间:2 秒
方案4:
主键Id,默认为聚集索引
在Title、Author、Star上建立非聚集索引
select*fromNewswhereTitlelike’"&abigale&"%’orAuthorlike’"&abigale&"%’ |
从字段Title和Author中模糊检索,不排序查询时间:1.8 - 2 秒
方案5:
主键Id,默认为聚集索引
在Title、Author、Star上建立非聚集索引
select*fromNewswhereTitlelike’"&abigale&"%’ |
或
select*fromNewswhereAuthorlike’"&abigale&"%’ |
从字段Title 或 Author中检索,不排序查询时间:1秒
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接