自己又试了一下, 增加了一个总为空的索引字段ISA
KEY `IXD2` (`TBD`,`ISA`)
使用这个查询结果正确. 但是EXPLAIN 提示:
"Using index; Using temporary; Using filesort " 是不是还可以优化???
因为实际运行中通常会有100W以上的数据,所以想尽可能少些遍历..
SQL 如下:
explain extended
select @t_count := count( if(substring(isa.TBD,1,1)=substring('0300116938',1,1),1,0)
+ if(substring(isa.TBD,2,1)=substring('0300116938',2,1),1,0)
+ if(substring(isa.TBD,3,1)=substring('0300116938',3,1),1,0)),
@eee :=( if(substring(isa.TBD,1,1)=substring('0300116938',1,1),1,0)
+ if(substring(tbd,2,1)=substring('0300116938',2,1),1,0)
+ if(substring(tbd,3,1)=substring('0300116938',3,1),1,0) ) ,
@t_total :=sum( if(substring(isa.TBD,1,1)=substring('0300116938',1,1),1,0)
+ if(substring(isa.TBD,2,1)=substring('0300116938',2,1),1,0)
+ if(substring(isa.TBD,3,1)=substring('0300116938',3,1),1,0)),
@t_num1 := sum(if(
if(substring(isa.TBD,1,1)=substring('0300116938',1,1),1,0)
+ if(substring(isa.TBD,2,1)=substring('0300116938',2,1),1,0)
+ if(substring(isa.TBD,3,1)=substring('0300116938',3,1),1,0) =1
,1 ,0)),
@t_num2 := sum( if( if(substring(isa.TBD,1,1)=substring('0300116938',1,1),1,0)
+ if(substring(isa.TBD,2,1)=substring('0300116938',2,1),1,0)
+ if(substring(isa.TBD,3,1)=substring('0300116938',3,1),1,0) =2 ,1 ,0)),
@t_num3 := sum( if( if(substring(isa.TBD,1,1)=substring('0300116938',1,1),1,0)
+ if(substring(isa.TBD,2,1)=substring('0300116938',2,1),1,0)
+ if(substring(isa.TBD,3,1)=substring('0300116938',3,1),1,0) =3 ,1 ,0))
from isa group by ISA.isa ; |