哪位大哥帮理忙表sinout 有6百万条记录,sinmbd,sinbox建了索引
declare @mbd_id decimal
declare @boxID decimal
set @mbd_id=161833
set @boxID=263
查询1:select sum(sinqty) from SINOUT where sinmbd=@mbd_id and sinbox=@boxID这样子查询数据用了7秒,这样子它没走索引。
 
查询2:select SUM(sinqty) from SINOUT where sinmbd=161833 and sinbox=263这样子写查询不到1秒,这里走了索引为什么查询1不走索引?

解决方案 »

  1.   

    这是个常见问题,你可以这么写来提高性能declare @mbd_id decimal
    declare @boxID decimal
    set @mbd_id=161833
    set @boxID=263
    declare @sql nvarchar(max)
    set @sql =N'select sum(sinqty) from SINOUT where sinmbd=' + cast(@mbd_id  as nvarchar(20)) + ' and sinbox=' + cast(@boxID as nvarchar(20))exec(@sql)当然,如果考虑安全性,需考虑防注入
      

  2.   

    使用变量可能导致查询优化器索引选择失误,楼主可尝试强制使用索引select sum(sinqty) from SINOUT with(index(sinmbd))
      where sinmbd=@mbd_id and sinbox=@boxID