日期:2014-05-18  浏览次数:20589 次

SQL语句优化(续)
select   *   from   (select   mobileNo,...,rownumber()   over(order   by   id)   as   m   from   tbizdetail   where   cast(optTime   as   varchar(10))   between   '2007-07-13 '   and   '2007-07-13 '       and   (branchName   = ' '   or   branchName   =   '广州 '   or   branchName   =   '深圳 ')   and   (bizName   = '套餐办理情况查询 '   or   bizName   =   '开通国际长途情况查询 ')   and   (brandName   = '动感地带 '   or   brandName   =   '神州行 '   or   brandName   =   '全球通 '))   as   a   where   a.m   between   1   and   30

上面是后台打印的SQL语句,tbizdetail表已经有1亿条记录。
or条件中,branchName最多有21个,brandName最多有5个,bizName有三、四百个
用的是db2,分页是这样子吧?都是Varchar类型

请问上面的语句会导致索引失效吗?各位有没有什么好的解决方案啊?投入运行的时候,效率实在太慢了,难以忍受

------解决方案--------------------
MS第1句就用不到索引了
cast(optTime as varchar(10)) between '2007-07-13 ' and '2007-07-13 '

bizName有三、四百个
这個強悍.....

------解决方案--------------------
上面是后台打印的SQL语句,tbizdetail表已经有1亿条记录。
or条件中,branchName最多有21个,brandName最多有5个,bizName有三、四百个
用的是db2,分页是这样子吧?都是Varchar类型

把这三个内容放到三个表里,然后用IN试试
branchName
brandName
bizName


------解决方案--------------------
问题没有解决,分数回收