sql2008 数据查询 走索引问题

youshangren 2011-07-25 05:08:06
哪位大哥帮理忙

表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不走索引?
...全文
76 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
快溜 2011-07-25
  • 打赏
  • 举报
回复
使用变量可能导致查询优化器索引选择失误,楼主可尝试强制使用索引

select sum(sinqty) from SINOUT with(index(sinmbd))
where sinmbd=@mbd_id and sinbox=@boxID
dut 2011-07-25
  • 打赏
  • 举报
回复
这是个常见问题,你可以这么写来提高性能

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)


当然,如果考虑安全性,需考虑防注入

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧