SQL查詢語句優化的實用方法

2021-08-19 23:46:04 字數 1983 閱讀 1441

查詢語句的優化是sql效率優化的乙個方式,可以通過優化sql語句來盡量使用已有的索引,避免全表掃瞄,從而提高查詢效率。最近在對專案中的一些sql進行優化,總結整理了一些方法。

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。

其實,總結起來,大家應該也發現了,就是在查詢的時候,要盡量讓資料庫引擎使用索引。而如何讓資料庫按我們的意思去使用索引就涉及到掃瞄引數(sarg)的概念。在資料庫引擎在查詢分析階段,會使用查詢優化器對查詢的每個階段(如乙個帶子查詢的sql語句就存在不同的查詢階段)進行分析,來決定需要掃瞄的資料量。如果乙個階段可以被用作掃瞄引數,那麼就可以限制搜尋的資料量,從而一定程度上提高搜尋效率。

sarg的定義:用於限制搜尋的乙個操作,因為它通常是指乙個特定的匹配,乙個值的範圍內的匹配或者兩個以上條件的and連線。

所以,我們要讓我們寫的查詢條件盡量能夠讓引擎識別為掃瞄引數。具體做法,就如前面提到的這些方法。

sql查詢優化實用篇

一 查詢優化優化率 總 業務設計 資料庫設計 查詢優化 產品裝置 高併發cpu要求高,記憶體要求高,資料量大 磁碟空間大 解析 1業務設計 產品經理設計,開發人員優化 業務處理應盡量少連線資料庫 如 有乙個listids 可以迴圈乙個乙個查 也可以用 in listids 一次查全 業務處理複雜,沒...

SQL查詢語句優化

sql查詢語句優化的使用方法 查詢語句的優化是sql效率優化的乙個方式,可以通過優化sql語句來盡量使用已有的索引,避免全表掃瞄,從而提高查詢效率。最近在對專案中的一些sql進行優化,總結整理了一些方法。1 在表中建立索引,優先考慮where group by使用到的字段。2 盡量避免使用selec...

Sql語句的優化查詢

1.多表查詢時必須指定別名 防止新加字段有同名字段 導致報錯 2.子句中避免使用 在select子句中列出所有的column時,使用動態sql列引用select 是乙個方便的方法.不幸的是,這是乙個非常低效的方法.實際上,oracle在解析的過程中,會將 依次轉換成所有的列名,這個工作是通過查詢資料...