当前位置:  开发笔记 > 数据库 > 正文

按参数过滤查询的最佳方法是什么?

如何解决《按参数过滤查询的最佳方法是什么?》经验,为你挑选了1个好方法。

我一直在使用这种方法来过滤我的查询:

Create PROCEDURE [dbo].[pGetTask]
    @showCompletedTasks bit = 1
    ,@showInProgressTasks bit = 1
    ,@taskID int = null
    ,@projectID int = null
    ,@applicationID int = null
    ,@clientID int = null

... Snip ...

where       
    a.clientID = isnull(@clientID, a.clientID)
    and a.applicationID = isnull(@applicationID, a.applicationID)
    and p.projectID = isnull(@projectID, p.projectID)
    and t.taskID = isnull(@taskID, t.taskID)
    and curr.complete = case @showCompletedTasks when 0 then 0 else curr.complete end
    and curr.complete = case @showInProgressTasks when 0 then 1 else curr.complete end

这实际上会使我的查询在664行结果集上减慢2秒.SQL调优顾问没有多大帮助,所以我认为这不是正确的方法.除了大量的if语句之外,还有正确的方法吗?



1> casperOne..:

假设您已正确索引选择所在的表,并且这些字段是索引的一部分,我的猜测是它将是对isnull的调用.我会改变它们:

(@clientID is null or a.clientID = @clientId) and ...

至于case语句,位字段的索引是没有意义的,因此没有太多可做的事情.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有