<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL高效查詢建議

          共 1607字,需瀏覽 4分鐘

           ·

          2021-04-28 12:59

          點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設(shè)為“置頂或星標”,第一時間送達干貨

          SQL專欄

          SQL基礎(chǔ)知識第二版
          SQL高級知識第二版

          為什么別人的查詢只要幾秒,而你的查詢語句少則十多秒,多則十幾分鐘甚至幾個小時?與你的查詢語句是否高效有很大關(guān)系。
          今天我們來看看如何寫出比較高效的查詢語句。
          1. 盡量不要使用NULL當默認值
            在有索引的列上如果存在NULL值會使得索引失效,降低查詢速度,該如何優(yōu)化呢?例如:
            SELECT *  FROM [Sales].[Temp_SalesOrder] WHERE UnitPrice IS NULL
            我們可以將NULL的值設(shè)置成0或其他固定數(shù)值,這樣保證索引能夠繼續(xù)有效。
            SELECT *  FROM [Sales].[Temp_SalesOrder] WHERE UnitPrice =0
            這是改寫后的查詢語句,效率會比上面的快很多。
          2. 盡量不要在WHERE條件語句中使用!=或<>
            在WHERE語句中使用!=或<>也會使得索引失效,進而進行全表掃描,這樣就會花費較長時間了。
          3. 應盡量避免在 WHERE子句中使用 OR
            遇到有OR的情況,我們可以將OR使用UNION ALL來進行改寫
            例如:
            SELECT * FROM T1 WHERE NUM=10 OR NUM=20
            可以改寫成
            SELECT * FROM T1 WHERE NUM=10
            UNION ALL
            SELECT * FROM T1 WHERE NUM=20
          4. IN和NOT IN也要慎用
            遇到連續(xù)確切值的時候 ,我們可以使用BETWEEN AND來進行優(yōu)化
            例如:
            SELECT * FROM T1 WHERE NUM IN (5,6,7,8)
            可以改寫成:
            SELECT * FROM T1 WHERE NUM BETWEEN 5 AND 8.


          5. 子查詢中的IN可以使用EXISTS來代替
            子查詢中經(jīng)常會使用到IN,如果換成EXISTS做關(guān)聯(lián)查詢會更快
            例如:
            SELECT * FROM T1 WHERE ORDER_ID IN (SELECT ORDER_ID FROM ORDER WHERE PRICE>20);
            可以改寫成:
            SELECT * FROM T1 AS A WHERE EXISTS (SELECT 1 FROM ORDER  AS B WHERE A.ORDER_ID=B.ORDER_ID AND B.PRICE>20)
            雖然代碼量可能比上面的多一點,但是在使用效果上會優(yōu)于上面的查詢語句。
          6. 模糊匹配盡量使用前綴匹配
            在進行模糊查詢,使用LIKE時盡量使用前綴匹配,這樣會走索引,減少查詢時間。
            例如:
            SELECT * FROM T1 WHERE NAME LIKE '%李四%'
            或者
            SELECT * FROM T1 WHERE NAME LIKE '%李四'
            均不會走索引,只有當如下情況
            SELECT * FROM T1 WHERE NAME LIKE '李四%'才會走索引。
          上述這些都是平常經(jīng)常會遇到的,就直接告訴大家怎么操作了,具體可以下去做試驗嘗試一下,今天就講到這里,如有什么疑問,請在下方留言。

          推薦閱讀



          后臺回復關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺回復關(guān)鍵字:進群,帶你進入高手如云的交流群

          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  18禁天堂 | 一本大道DVD中文字幕 | www.欧美精品 | 精品人妻中文字幕 | 欧美精品三区 |