2012-01-04 74 views
1

我已经为选择查询创建了一个存储过程,并且它工作正常。 但是我需要一些更有效的方法来创建我的SP查询。 你有什么建议。使我的存储过程更高效

Create Procedure usp_SelectUserProfile 
    @UserId int 
As 
Begin 
    Select <column name> from DB where UserId = @UserId 
End 

日Thnx

+0

你真的有速度问题吗?你可以做很多事情来改善这个查询。如果UserId是PK,那么它应该是一个简单的索引查找。 – Blorgbeard 2012-01-04 11:34:40

回答

5

我可以想像这里的唯一的事情就是:

Create Procedure usp_SelectUserProfile 
    @UserId int 
As 
Begin 
    SET NOCOUNT ON; 
    Select <column name> from DB where UserId = @UserId 
End 

禁止受影响的行量发送给客户端,与许多电话小程序可以为您节省高达17的通话时间%

+0

先生,如果我问,请问? (SET NOCOUNT ON;)基本上做什么? – 2012-01-04 11:31:23

+0

抑制向客户端发送受影响的行数量,对于有很多调用的小程序,它可以为您节省多达17%的通话时间 – 2012-01-04 11:33:02

+0

17%具有奇怪的特定性 - 我有兴趣阅读您对此的任何参考 – Blorgbeard 2012-01-04 11:36:43

0
  1. 如果用户名不是主键,然后创建(UserID) INCLUDE (<column name>)
  2. 一个新的索引与资格架构Select <column name> from dbo.MyTable where UserId = @UserId所有的对象引用。也可以在存储过程中使用它。没有这一点,你会阻止计划再利用
  3. 确保列的数据类型和长度UserId@UserId是相同的,以避免数据类型的优先级和隐式转换
  4. 添加SET NOCOUNT ON上其他答案提到:看到SET NOCOUNT ON usage