学习个人认为简单的存储过程不会比SQL语句快

解决方案 »

  1.   

    带变量的查询无法引用索引,故查询效率偏低,用动态SQL,不过因为exec()执行的字符串不是预编译的,所以跟存储过程外部直接执行SQL语句的效率差不多。create proc ddd
    @value as nchar(50)
    as
    begin
    declare @v1 as varchar(50)
    set @v1 = '%'+rtrim(@value)+'%'
    exec('select f1 from tbl where f2 like '''+@v1+'''')
    end
      

  2.   

    汗ing,刚留意到,这个查询本来就无法引用索引。
      

  3.   

    改成:
    select f1 from tbl where charindex('value',f2)>0 试试看
      

  4.   

    存储过程快是因为你执行一次后下次执行相同的他把刚刚执行的结果丢给你,你用exec他还要再生成计划当然慢啊
      

  5.   

    哈哈,不好意思,各位討論的初衷都和我的有所不同了,這個語句本身就不打算利用index,出現了問題的根本是為什麼同樣一件事到了存儲過程就慢了近倍呢?有什麼比較好的解決方案呢?歡迎各位來討論,謝謝
      

  6.   

    晕,你从性能上分折一下啊。
    LIKE语句是需要逐项对比判断,是需要搜索数据库每一条记录,故你建立了索引等于没有建,性能当初提升不了。
    解决方法有二:加大CPU、改搜索为全文搜索
      

  7.   

    to  runnerWujin() ,你好,其實你也看到了我沒有用到索引功能,在這種沒有用到索引的情況下,一個sql語句和一個包含了這條sql語句的sp速度差上一倍,究竟是什麼問題呢???如果有可能的話請各位針對性的討論一下,仔細分析一下上面的sql語句,謝謝!!
      

  8.   

    将存储过程改为:
    create proc ddd
    (
    @value as nchar(50)
    )
    as
    begin
    declare @v1 as varchar(50)
    set @v1 = '%'+@value+'%'         ------>这句。两条语句的条件不是完成一致,有时执行时间会差很多
    select f1 from tbl where f2 like @v1
    end
      

  9.   

    jin2005(小白) 兄,感謝你的回復。你說的這種方法我之前也是這麼懷疑的,不過經過測試已經確定了並不是這個原因,就算我寫的是set @value = '%value%'再select速度都是那麼慢啊!而將@value改成直接的值就快了,原因很明顯是like 變量這樣造成的,請問有沒有其它辦法呢?
      

  10.   

    根据楼主的情况,我也建立了一个存储过程进行测试,并没有发现这个情况,(两个查询查出来的时间差不多一样)。奇怪ing
    还有建立存储过程的时候,将传入参数改为"@value as varchar(50)"试试看
      

  11.   

    jin2005(小白)兄你好,幾天沒來看過自己的帖了,非常抱歉現在才回復你。經過了這麼多天的測試,我還是沒有解決這個問題,不過基本就鎖定在是使用變量的原因了。只要在like語句裡面添加上類似'%'+@value+'%'的語句,或者set @value='value'後在like @value就會出現這個問題。我的數據表中有300多萬條紀錄,所以出現的時間變化很明顯,不知道兄是否因為表內容較少所以感覺不出來呢?現在我的懷疑是sqlserver本身存在這個bug,可惜沒證據啊!小白兄是否有其它的建議呢?
      

  12.   

    根据楼主的意思,我在测试表中插入了400多万条记录,进行测试。。
    结果表明:
    用存储过程查询所用时间与普通方式查询(select f1 from tbl where f2 like '%value%')所用时间差不多,有时还比它快一点(由于查询时间较长,两次查询我分别只测试了两次)。相信不应该是你上面所说的问题。
    你可以找找是否是其他原因造成的。比如是否打有sp4补丁,或重建该表的索引.
      

  13.   

    全表扫描,与有无索引无关,看看偶的总结:
    http://community.csdn.net/Expert/topic/4428/4428715.xml?temp=.9201929