免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2221 | 回复: 3
打印 上一主题 下一主题

多条件的查询速度如何提高??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-13 16:14 |只看该作者 |倒序浏览
如果表的每个字段都有可能做查询条件,怎样才能提高查询速度?
对每个字段都建索引??

论坛徽章:
0
2 [报告]
发表于 2006-01-13 16:38 |只看该作者
原帖由 liujin_l 于 2006-1-13 16:14 发表
如果表的每个字段都有可能做查询条件,怎样才能提高查询速度?
对每个字段都建索引??


都建索引当然会最大限度的提高查询速度,但是做数据更新、插入、删除会大大的降低速度,并且会占用很多的磁盘空间(一个索引相当于一个排序了的表)。
最好的方法是,查询最多的几个字段建立索引、或者复合索引。

[ 本帖最后由 xxyyy 于 2006-1-13 16:39 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-01-13 16:49 |只看该作者

多条件的查询速度如何提高???

先谢谢了!
好像明白点了
如果查询条件用的是like,建索引能提高速度吗?

论坛徽章:
0
4 [报告]
发表于 2006-01-14 15:41 |只看该作者
原帖由 liujin_l 于 2006-1-13 16:49 发表
先谢谢了!
好像明白点了
如果查询条件用的是like,建索引能提高速度吗?


like有可能用到索引,也可能用不到。
比如有个表A,字段colA char(20),colB char(5),colC char(10),colD integer,colE date,并且在colA字段上建立了索引,colB + colC + colE建立了复合索引
如下查询是用到索引的(这两个语句等价):
select *
    from A
where  colA like "abc%";

select *
    from A
where  colA[1,3] = "abc";


如下查询是用不到索引的
(这两个语句等价):
  select *
      from A
  where colA like "%abc";

  select *
      from A
  where colA[18,20] = "abc";

如下查询也是是用不到索引的:
  select *
      from A
  where colA like "%abc%";

select *
  from A
where colC like "abc%";

select *
  from A
where colB like "%abc";

以下查询是可以用到索引的:
select *
from A
where colB like "abc%";

一句话,like或者matches操作符,被操作的字符串通配符在字符串后,是可以用到索引的,通配符在字符串前部分,是不能用到索引的。
原因是,索引文件是B+树(也可能是B-树),在排序时是从索引列的串首至串尾排序的,所以通配符在串首,是不能利用B+树快速查找定位的。

[ 本帖最后由 xxyyy 于 2006-1-14 19:57 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP