如何建立索引的问题,快

表b是个上千万的普通表,下面where中的字段全是varchar类型,
其中status只有0,1,2这3个不同的值,type有1,8共8种值,date里面从14年1月到现在的时间,这个范围内的值,sql条件如下:
b WHERE   b.TYPE IN (1,2)  and
b.status = '0' and b.date < '2014-05-14 16:00:00'





1:如何建立索引??


2:in 不走索引怎么解决?
参与9

8同行回答

db2china2db2china2技术经理DB2咨询服务
回复 1# nanjing_2013 结合select列表、排序(聚合)等子句先:使用db2advis看索引建议。再考虑,对以下3个条件,符合条件记录数从少到多的字段顺序做为复合索引的字段顺序:b.TYPE IN (1,2)  b.status = '0' b.date < '2014-05-14 16:00:00'...显示全部
回复 1# nanjing_2013
结合select列表、排序(聚合)等子句
先:使用db2advis看索引建议。
再考虑,对以下3个条件,符合条件记录数从少到多的字段顺序做为复合索引的字段顺序:
b.TYPE IN (1,2)  
b.status = '0'
b.date < '2014-05-14 16:00:00'收起
IT咨询服务 · 2015-05-18
浏览729
zhujinkzhujink商业智能工程师未知
分区吧,按你这查询条件,返回的查询结果本来就很多,也就是说你where条件中的这些列,选择率都很大,创建索引无法本质上提高查询速度。若确认了查询列无法做修改,就修改业务逻辑吧。...显示全部
分区吧,按你这查询条件,返回的查询结果本来就很多,也就是说你where条件中的这些列,选择率都很大,创建索引无法本质上提高查询速度。若确认了查询列无法做修改,就修改业务逻辑吧。收起
银行 · 2015-05-16
浏览765
drdb2drdb2系统工程师se
要看select count(*) from b whereb WHERE   b.TYPE IN (1,2)  andb.status = '0' and b.date < '2014-05-14 16:00:00' ;返回多少rows。如果大量的rows返回(相对总rows而言), 即便create index, optimizer也不会采用:因为index通常在query small portion ...显示全部
要看
select count(*) from b where
b WHERE   b.TYPE IN (1,2)  and
b.status = '0' and b.date < '2014-05-14 16:00:00' ;
返回多少rows。

如果大量的rows返回(相对总rows而言), 即便create index, optimizer也不会采用:
因为index通常在query small portion of data才更有效。
最好db2advis一下,先看看optimizer有啥建议。收起
互联网服务 · 2015-05-16
浏览743
richard_macyrichard_macy数据库管理员macys
如果你的数据分布均匀,试一下 MDC.显示全部
如果你的数据分布均匀,试一下 MDC.收起
零售/批发 · 2015-05-15
浏览724
wangyaxwangyax软件开发工程师金融机构
in 不走索引怎么解决? 如果你是创建多个索引的话,db2可能选择它认为最优的一条索引走。当然,即便按照楼上的方法创建索引,在查询的时候可能也可能不走索引,这取决于通过你的条件筛选出来的记录数和总记录之间有多大的差异。这种差异越大走索引的可能性越大。...显示全部
in 不走索引怎么解决?

如果你是创建多个索引的话,db2可能选择它认为最优的一条索引走。

当然,即便按照楼上的方法创建索引,在查询的时候可能也可能不走索引,这取决于通过你的条件筛选出来的记录数和总记录之间有多大的差异。
这种差异越大走索引的可能性越大。收起
互联网服务 · 2015-05-15
浏览764
wangzk0206wangzk0206数据库管理员scrcu
status+(date、type两个选一个,看选择性!)显示全部
status+(date、type两个选一个,看选择性!)收起
银行 · 2015-05-15
浏览743
DB-TrendSetterDB-TrendSetter联盟成员数据库架构师公司
runstats后,可以使用 db2advis 让优化器给出 合适的索引 建议。显示全部
runstats后,可以使用 db2advis 让优化器给出 合适的索引 建议。收起
电信运营商 · 2015-05-15
浏览737
shadowflareshadowflare软件开发工程师交通银行
CREATE INDEX IX_1  ON B(        DATE ASC       ,TYPE ASC       ,STATUS ASC )显示全部
CREATE INDEX IX_1
  ON B(
        DATE ASC
       ,TYPE ASC
       ,STATUS ASC )收起
银行 · 2015-05-15
浏览734

提问者

nanjing_2013
系统架构师北京卓望

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2015-05-15
  • 关注会员:1 人
  • 问题浏览:4154
  • 最近回答:2015-05-18
  • X社区推广