<rp id="wnpn7"><ruby id="wnpn7"></ruby></rp>
<progress id="wnpn7"><track id="wnpn7"><rt id="wnpn7"></rt></track></progress>
<ruby id="wnpn7"></ruby>
<ruby id="wnpn7"><blockquote id="wnpn7"><div id="wnpn7"></div></blockquote></ruby>

    1. <em id="wnpn7"><ruby id="wnpn7"><input id="wnpn7"></input></ruby></em>
      1. <button id="wnpn7"><acronym id="wnpn7"></acronym></button><button id="wnpn7"><acronym id="wnpn7"></acronym></button>

        <rp id="wnpn7"><acronym id="wnpn7"></acronym></rp>

        <li id="wnpn7"><object id="wnpn7"><u id="wnpn7"></u></object></li>
        VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 數據庫 > sql語句 >
        • sql語句大全之SQL干貨筆記

         

        因為公司基本都是用存儲過程所以本來寫的干貨基本都是存儲過程的。

         

        1
        2
        SELECT TOP 1 Code,Invitation,Num,Typ FROM SignLog WITH(NOLOCK)
        WHERE  UserId=@userId AND TaskId=2 AND AddTime>=@stime AND AddTime<@etime

        用以上語句來說一下例子:

        查詢 一定要指定字段就算你要查全部字段也不要用*號來代替   ,以及  能用TOP盡量TOP

        避免沒必要的鎖 必須加   WITH(NOLOCK) 避免產生沒有必要的鎖出來。

         

         

         因為字段多,數據多一個索引沒有走。

         

         

         

         

         

         加了字段后就會快很多比你查全部的快很多,精準的查詢。

         ------------------------------------------------------------------------------------------------------------

        1
        UserId=@userId AND TaskId=2 AND AddTime>=@stime AND AddTime<@etime<br data-filtered="filtered"><br data-filtered="filtered">如果UserId和AddTime是索引,TaskId不是,那像上面這樣只會走一個索引。<br data-filtered="filtered"><br data-filtered="filtered">
        1
        UserId=@userId AND AddTime>=@stime AND AddTime<@etime AND TaskId=2
        1
        如果改成上面這樣就會走兩個索引。<br data-filtered="filtered">------------------------------------------------------------------------------------------------------------<br data-filtered="filtered"><br data-filtered="filtered"><br data-filtered="filtered">UPDATE SignLog SET NUM+=1 WHERE UserId=@userId AND AddTime>=@stime AND AddTime<@etime AND TaskId=2<br data-filtered="filtered"><br data-filtered="filtered">像上面這樣的更改語句這樣寫是沒有什么的,如果是在存儲過程寫的話像下面一樣寫會比你上面寫法快。
        DECLARE @ID INT=0
        SELECT TOP 1 @ID=ID FROM SignLog WITH(NOLOCK) WHERE UserId=@userId AND AddTime>=@stime AND AddTime<@etime AND TaskId=2
        UPDATE SignLog SET NUM+=1 WHERE ID=@ID

        像這樣寫正常會快點,而且也不會產生沒有必要的鎖出來,而且該走的索引都走了。

        能走索引就走索引,索引肯定比你正常的快丶丶。

         

        -------------------------------------------------------------------------------------------------------------

         

        UPDATE dbo.Activity_RoomActivity SET ActivityState=2 WHERE  ActivityState=0 AND StartTime<DATEADD(hh,-1,GETDATE())
        1
        這樣更新一個索引沒有走上,而且還一條一條改。<br data-filtered="filtered"><br data-filtered="filtered">可以改成以下差不多的。<br data-filtered="filtered"><br data-filtered="filtered">
        復制代碼
             SELECT Id INTO #temp
                FROM dbo.Activity_RoomActivity WITH(NOLOCK)
                WHERE  ActivityState=0 AND StartTime<DATEADD(hh,-1,GETDATE())
        
                UPDATE t1 SET t1.ActivityState=2 FROM dbo.Activity_RoomActivity t1,#temp t2 
                WHERE t1.Id=t2.Id 
        復制代碼

         這樣修改的時候就會走索引去修改。

        1
        <br data-filtered="filtered"><br data-filtered="filtered">
        1
        <br data-filtered="filtered"><br data-filtered="filtered"><br data-filtered="filtered"><br data-filtered="filtered"><br data-filtered="filtered"><br data-filtered="filtered">
        相關教程
                
        免费看成年人视频大全_免费看成年人视频在线观看