首頁 > 資料庫 > SQL > 主體

sql優化有哪些方法

王林
發布: 2020-07-01 15:55:05
原創
8873 人瀏覽過

sql優化的方法:1.盡量避免使用【select *】,無用的字段會降低查詢效率;2、避免使用in和not in,可以選擇between和exists代替;3、避免使用or ,可以選擇union代替。

sql優化有哪些方法

sql優化的方法:

(推薦學習:mysql教學

#1、在表中建立索引,優先考慮where、group by使用到的欄位。

2、盡量避免使用select *,傳回無用的欄位會降低查詢效率。如下:

SELECT * FROM t
登入後複製

最佳化方式:使用特定的欄位取代*,只傳回使用到的欄位。

3、盡量避免使用in 和not in,會導致資料庫引擎放棄索引進行全表掃描。如下:

SELECT * FROM t WHERE id IN (2,3)
SELECT * FROM t1 WHERE username IN (SELECT username FROM t2)
登入後複製

最佳化方式:如果是連續數值,可以用between取代。如下:

SELECT * FROM t WHERE id BETWEEN 2 AND 3
登入後複製

如果是子查詢,可以用exists代替。如下:

SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username)
登入後複製

4、盡量避免使用or,會導致資料庫引擎放棄索引進行全表掃描。如下:

SELECT * FROM t WHERE id = 1 OR id = 3
登入後複製

優化方式:可以用union取代or。如下:

SELECT * FROM t WHERE id = 1
UNION
SELECT * FROM t WHERE id = 3
登入後複製

(PS:如果or兩邊的字段是同一個,如例子中這樣。貌似兩種方式效率差不多,即使union掃描的是索引,or掃描的是全表)

5、盡量避免在欄位開頭模糊查詢,會導致資料庫引擎放棄索引進行全表掃描。如下:

SELECT * FROM t WHERE username LIKE '%li%'
登入後複製

最佳化方式:盡量在欄位後面使用模糊查詢。如下:

SELECT * FROM t WHERE username LIKE 'li%'
登入後複製

6、盡量避免null值的判斷,會導致資料庫引擎放棄索引進行全表掃描。如下:

SELECT * FROM t WHERE score IS NULL
登入後複製

最佳化方式:可以為欄位新增預設值0,對0值進行判斷。如下:

SELECT * FROM t WHERE score = 0
登入後複製

7、盡量避免在where條件中等號的左側進行表達式、函數操作,會導致資料庫引擎放棄索引進行全表掃描。如下:

SELECT * FROM t2 WHERE score/10 = 9
SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'
登入後複製

最佳化方式:可以將表達式、函數操作移到等號右側。如下:

SELECT * FROM t2 WHERE score = 10*9
SELECT * FROM t2 WHERE username LIKE 'li%'
登入後複製

8、當資料量大時,避免使用where 1=1的條件。通常為了方便拼裝查詢條件,我們會預設使用該條件,資料庫引擎會放棄索引進行全表掃描。如下:

SELECT * FROM t WHERE 1=1
登入後複製

優化方式:用程式碼拼裝sql時進行判斷,沒where加where,有where加and。

以上是sql優化有哪些方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!