银行

多列索引的疑问

由于数据库在生产环境,不方便贴信息,描述下有个表,大概10个字段,其中有两个字段eventid和sign,eventid是int型,sign是varchar(256)做了个索引(sign,eventid)按照如下语句搜索1. db2 "select * from **** where eventid=51000 and sign like 'ENT%' "然后发现走了索引,大概是ixsc...显示全部
由于数据库在生产环境,不方便贴信息,描述下

有个表,大概10个字段,其中有两个字段eventid和sign,eventid是int型,sign是varchar(256)

做了个索引(sign,eventid)

按照如下语句搜索
1. db2 "select * from **** where eventid=51000 and sign like 'ENT%' "
然后发现走了索引,大概是ixscan->sort->ridscan->fetch

这里有第一个问题,为什么ixscan后,要做sort?我并没有排序啊

然后使用第二个语句:
2. db2 "select * from **** where eventid=51000 and sign like '%ENT%' "
也走了索引,大概是ixscan->fetch,没有排序,但是cost是上面一种情况的3倍

按原来的理解,like后面是%开头的,是不会走索引的。且多列索引,如果where条件中的列不在多列索引的开头列,就不会走这个多列索引。 那现在是什么情况?是不是我的理解有误?收起
参与6

查看其它 3 个回答jimmy的回答

jimmyjimmy数据仓库工程师招行软件中心
首先索引扫描不是因为判断sign like 'ENT%' ,而是把索引全部取出来,排序,然后通过eventid=51000定为某些索引的行,然后再通过sign like 'ENT%' 定位rowid,最后去取数据
银行 · 2013-08-15
浏览749

回答者

jimmy
数据仓库工程师招行软件中心
擅长领域: 大数据数据库商业智能

jimmy 最近回答过的问题

回答状态

  • 发布时间:2013-08-15
  • 关注会员:1 人
  • 回答浏览:749
  • X社区推广