必須掌握的13種SQL語句優化

2021-09-24 23:17:13 字數 1628 閱讀 3536

​1、對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在where 及order by 涉及的列上建立索引。

2、應盡量避免在where 子句中使用!= 或<> 操作符,否則引擎放棄使用索引而進行全表掃瞄。

3、應盡量避免在where 子句中對字段進行 null值判斷。否則將導致引擎放棄使用索引而進行全表掃瞄,如:select  * from t where num is null

可以在num上設定預設值0 ,確保表中num列沒有null值。然後這樣查詢

select num   from t  where t.num=0

4、應該盡量避免在where 子句中使用 or來連線條件,否則將導致引擎放棄索引而進行全表掃瞄,如:select num   from t  where  num =10  or   num=20

可以這樣查詢:

select num   from t where num=10  union all  select num    from t where num= 20

注意:union 與union all 區別

其中 兩者的作用是把結果集查詢出來合併 然後返回乙個結果集 。但是使用前提是兩表具有相同列數與 對應列數的資料型別相同。union 會對 合併結果集進行排序  篩選重複的元素  占用cpu大   建議資料量大  不使用。反之 union all不會對其結果集進行排序 、篩選。直接返回。

5、這樣查詢也會導致全表查詢 

select  num    from t where t.name  like '%abc%'

若提高效率 則使用全文檢索。

6、 in 和not in要慎用,否則也會導致全表掃瞄,如:

select num    from t   where num in('1','2','3')

對於連續的數值  ,能用between  就不要用in

select  num    from t where num between 1  and  3

7、應盡量避免在where 子句中對字段 進行表示式操作,這也將會導致全表掃瞄。

select  num    from t  where  num/2=100

8、指定 列名查詢時  盡量將列名大寫,在我們資料庫中的解析器 解析時 會把sql轉化成大寫。如果直接寫成大寫  就省去這一步,提高效率。

9、很多時候用exists  代替 in是乙個好的選擇

select num  from t  where num in(select  num  from tt)

可以寫成;

select  * from t where exists(select  1 from tt  where  num=t.num)

10、任何地方都不要使用  select * from t,用具體的字段列表代替 *   ,不要返回用不到的字段。

11、索引並不是越多越好,索引固然可以提高相應的select 的效率,但同時也降低 了 insert  及update的效率,因為insert 或 update 時 有可能會重建索引。一般 一張表中最好不超過 6個。

12、合理建立索引,一般在經常查詢的字段上建立索引 提高查詢速度。避免在像 「性別「字段建立  ,原因因為這樣的字段 總只有兩個值『男』 『女』

13、避免頻繁建立和刪除臨時表,以減少系統表資源的消耗。

軟體開發高手必須掌握的4大SQL精髓語句(一)

軟體開發高手必須掌握的4大sql精髓語句 一 馬根峰 廣東聯合電子收費股份 廣州 510300 作者部落格 csdn部落格 qq空間 0 引言隨著計算機在社會各領域應用的深入,軟體開發人員不得不面臨著或多或少的資料處理 資料庫訪問。在sql structured query language 語言d...

sql語句的優化

1 in 操作符 用in寫出來的sql的優點是比較容易寫及清晰易懂,這比較適合現代軟體開發的風格。但是用in的sql效能總是比較低的,從oracle執行的步驟來分析用in的sql與不用in的sql有以下區別 oracle試圖將其轉換成多個表的連線,如果轉換不成功則先執行in裡面的子查詢,再查詢外層的...

SQL語句的優化

通過使用者反饋獲取存在效能問題的sql 通過慢查日誌獲取存在效能問題的sql 實時獲取存在效能問題的sql mysqldumpslow pt query digest pt query digest explain h 127.0.0.1,u root,p p ssword slow mysql.l...