SQL高效查詢建議
點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,
設(shè)為“置頂或星標”,第一時間送達干貨
盡量不要使用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 這是改寫后的查詢語句,效率會比上面的快很多。 盡量不要在WHERE條件語句中使用!=或<> 在WHERE語句中使用!=或<>也會使得索引失效,進而進行全表掃描,這樣就會花費較長時間了。 應盡量避免在 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 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. 子查詢中的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)于上面的查詢語句。 模糊匹配盡量使用前綴匹配 在進行模糊查詢,使用LIKE時盡量使用前綴匹配,這樣會走索引,減少查詢時間。 例如: SELECT * FROM T1 WHERE NAME LIKE '%李四%' 或者 SELECT * FROM T1 WHERE NAME LIKE '%李四' 均不會走索引,只有當如下情況 SELECT * FROM T1 WHERE NAME LIKE '李四%'才會走索引。
推薦閱讀
SQL語句中 LEFT JOIN后用 ON 還是 WHERE,區(qū)別大了! 終于有人把內(nèi)卷和囚徒困境講明白了 老婆離家三周,我寫了一個操作系統(tǒng)! 為什么下載小電影時,經(jīng)常會卡在99%? 知乎上這個程序員火了,竟是因為給老板修了一 次U盤...
后臺回復關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
后臺回復關(guān)鍵字:進群,帶你進入高手如云的交流群
評論
圖片
表情

