微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server数据库查询优化3种技巧

本文中,abigale代表查询字符串,ada代表数据表名,alice代表字段名。
  技巧一:
  问题类型:ACCESS数据库字段中含有日文片假名或其它不明字符时查询提示内存溢出。
  解决方法修改查询语句
  sql=select * from ada where alice like '%&abigale&%'
  改为
  sql=select * from ada
  rs.filter = alice like '%&abigale&%'
  技巧二:
  问题类型:如何用简易的办法实现类似百度的多关键词查询(多关键词用空格或其它符号间隔)。
  解决方法
  '//用空格分割查询字符串
  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秒

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐