SQ優化策略

2021-09-12 10:28:00 字數 3099 閱讀 5822

1.對查詢進行優化,要盡量避免全表掃瞄,首先應考慮在進行條件判斷的字段上建立索引

2.應盡量避免在where子句中對字段進行null值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄

select

*from

scott

.emp

where job is

null

;

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

select

*from

scott

.emp

where job <

>

'salesman'

;

4.應盡量避免在where字句中使用or來連線條件,如果乙個欄位有索引,乙個字段沒有索引,將導致引擎放棄使用索引而進行全表掃瞄,可以使用union all 實現

select

*from

scott

.emp

where job=

'salesman'

union

allselect

*from

scott

.emp

where sal>

1000

;

5.not in 也要慎用,否則會導致全表掃瞄,很多時候用not exists 代替 not in 是乙個好的選擇

主鍵預設索引:

select

*from

scott

.emp

where empno>

7788

;

我們在empno欄位上沒有建立索引,但是使用的是索引掃瞄,原因是empno是表的主鍵,主鍵字段資料庫會預設使用索引

使用not in

select

*from

scott

.emp

where empno notin(

7788

);

此時發現使用的是全表掃瞄,可以使用not exists代替他

select

*from

scott

.emp e1

where

notexists

(select

*from

scott

.emp

where e1.empno=

7788

);

6.模糊查詢使用了%也將導致全表掃瞄(在mysql中)

這種情況只有在mysql中才會失效,可以將使用者可能輸入的關鍵字使用下拉表列出來,在資料庫中使用全名稱查詢,比如說:select * from emp where job like關鍵字』

7.應盡量避免在where子句中對字段進行表示式計算操作,這將導致引擎放棄使用索引而進行全表掃瞄

select

*from

scott

.emp

where sal/2=

1000

;解決方案:

select

*from

scott

.emp

where sal=2*

1000

;

8.在使用索引字段作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第乙個字段作為條件時才能保證系統使用該索引(最左原則),否則該索引將不會被使用,並且應盡可能的讓字段順序與索引順序相一致。所謂的復合索引就是建立乙個索引的時候作用在多個欄位上

查詢(不使用第乙個字段)

select

*from

scott

.emp

where sal>

1000

;

此時使用的是全表掃瞄

查詢(使用第乙個字段)

select

*from

scott

.emp

where job=

'salesman'

;

當使用復合索引的時候如果只要其中乙個字段,那麼必須使用第乙個字段(在建立索引時候的字段順序)索引才會生效,這叫作索引的最左原則

查詢(使用兩個字段)

select

*from

scott

.emp

where sal>

1000

and job=

'salesman'

;

在or邏輯中使用復合索引

select

*from

scott

.emp

where sal>

1000

or job=

'salesman'

;

會失效,使用 union all 代替 or 查詢

9.update語句,如果只更改1,2個字段,不要update全部字段,否則頻繁呼叫會引起明顯的效能消耗,同時帶來大量的日誌

10.對於多張大資料量的表連線,可以考慮使用程式去實現,不要做連線查詢,就是盡量避開多表查詢

11.索引並不是越多越好,索引固然可以提高相應的select的效率,但同時也降低了insert及update的效率,因為insert或update時有可能會重建索引,索引怎樣建索引需要慎重考慮,視具體情況而定

12.盡量使用數字型字段,若只含數字資訊的字段盡量不要設計為字元型,這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎在處理查詢和連線時會逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了

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

14.學會使用慢查詢來進行資料庫的優化

ORACLE STA sql id方式優化SQL

oracle10g以後版本的sql tuning advisor可以從以下四個方面給出優化方案 1 為統計資訊丟失或失效的物件收集統計資訊 2 考慮優化器的任何資料偏差 複雜謂詞或失效的統計資訊 3 重新構建 sql 以優化效能 4 提出新索引建議 下面來實際測試 1 為sql id建立乙個sta ...

mysql索引優化思路(優化UCP的慢SQL總結)

1 能用唯一索引不要用普通索引,能用組合索引盡量不用單列索引。2 索引不會走包含有null的列,只要列中包含有null值,都將不會被包含在索引中,組合索引中只要有一列含有null值,那麼這一列對於此組合索引就是無效的。3 order by與group by後的字段需要結合where條件的字段建組合索...

mysql 優化策略 mysql的優化策略有哪些

第一 優化你的sql和索引 1.善用explain,看看自己寫的sql到底要涉及到多少表,多少行,使用了那些索引,根據這些資訊適當的建立索引 2.善用不同的儲存引擎,mysql有多種不同的儲存引擎,innodb,aria,memory根據需要給不同的表選擇不同的儲存引擎,比如要支援transacti...