select Min(datacode) 
from(
select datacode from data where type='0'
)a 
where 
LEN(datacode)=(select max(len(datacode))from (
select datacode from data where type='0'
)a)以上这句需求是从目标表获取列datacoe中值的长度最大的值中的最小值
例如从1 2 32 9 71 123 567 234获取123
我这样写执行效率很低,要进行2次聚集索引扫描。
请优化一下优化sql

解决方案 »

  1.   


    select Min(datacode) 
    from data 
    where type='0'
    and LEN(datacode)=(select max(len(datacode))from data)这样执行多久呢
      

  2.   

    ...那只是我贴sql过来时的一个疏忽,实际上type不等于0的数据量极少,基本不会影响性能。
      

  3.   

    select top 1 len(datacode) ld,min(len(datacode)) from data group by len(datacode)
    order by ld desc
    主要是一般加了函数进行计算时都用不到索引,好像也没什么好优化的了
      

  4.   

    有没有其他方法呢?只要满足我的需求:获取列datacoe中值的长度最大的值中的最小值