索引 sql優化

2022-08-04 11:33:13 字數 1807 閱讀 8510

索引的概念

索引是提高查詢速度的一種手段。

索引有很多種,以下是索引樹的結構

要求查詢出薪資大於5000的雇員資訊,只要在樹中找到

5000

的節點,直接查詢該節點右邊的資料即可,左邊就不用管了,這樣提高了查詢的效率。

將資料按照索引資料的方式儲存需要先建立索引。

基本語法:

create  index  索引名   

on   

資料表(欄位名)

;刪除索引:

drop index 索引名

;注意:系統預設主鍵使用索引。

復合索引

乙個索引在多個欄位上建立,就是乙個索引作用於多個字段。

例如:create index 索引名

on 資料表(字段

1,欄位2)

;注意:查詢資料使用欄位2,此時使用的是全表掃瞄模式,查詢資料使用字段

1,此時使用的是索引掃瞄模式。(此現象叫做索引的最左原則

在oracle中使用了多個字段,並且是

and

連線的條件,那麼欄位的順序不影響掃瞄的方式(索引掃瞄),如果是

mysql

則需要和復合索引的字段順序一致。使用

or連線條件會導致索引失效,應該使用

union all

代替or

查詢。總結:索引不能隨便用。如果一張資料表更新頻率太高,更新資料之後需要重新建立索引,這一過程很耗費效能。

1、對查詢進行優化,要盡量避免全表掃瞄,首先應考慮在進行條件判斷的字段上建立索引。(使用索引的資料表不能更新頻率太高,否則需要重新再建立索引,耗費效能。)

2、盡量避免在where子句中對字段進行

null

值判斷、對欄位進行表示式計算操作、使用!=或

<>

操作符、使用

or來連線條件(如果乙個條件有索引乙個沒有索引),否則將導致引擎放棄使用索引而進行全表掃瞄。

3、not in 要慎用,否則會導致全表掃瞄,可用

not exists

代替。4、模糊查詢使用了「%

」也會導致索引失效(可以將使用者可能輸入的關鍵字使用下拉列表列出來,在資料庫中使用全名稱查詢,比如說:

select * from emp where job like 『關鍵字』)。

5、使用復合索引要滿足最左原則,並且應盡可能的讓字段順序與索引順序一致。

6、update語句,不要更改全部字段,否則需要重新建立索引,損耗效能

7、對於多張大資料(幾百條)的連線(多表連線查詢),可以考慮使用程式去實現,盡量不要連線查詢(多表查詢出現笛卡爾積增加記憶體開銷)。

8、索引不是越多越好,索引提高了select查詢的效率,但同時也降低了

insert

插入及update

更新的效率,插入或更新有時可能會重建索引。

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

10、任何地方都不要使用select *,用具體的字段代替『

*』,不要返回用不到的任何字段。

11、使用慢查詢來進行資料庫的優化。觀察到慢查詢的最方便途徑是(spring+druid)可以輕鬆的實現,可以觀察具體哪些

sql語句是執行最慢的,之後再對查詢進行優化。

SQL優化 索引優化

一 發現哪些sql語句有效能問題 開啟mysql慢查詢日誌對sql語句進行監控 show variables like slow query log 檢視是否開啟慢查詢日誌 set global slow query log on 開啟慢查詢日誌 set global log queries not...

SQL優化(SQL 索引)

檢視表定義 show create table users 檢視表的索引 show index from users 你要獲取第乙個表的所有資訊,你說全表掃瞄快呢還是索引掃瞄快呢?所以當你查詢庫 包括left join中的臨時庫 的所有資訊時,資料庫會選擇最優方法 全表掃瞄!s表dept id na...

sql索引優化

1 b tree索引 b tree索引的特點 以b 樹的結構儲存資料 能加快資料的查詢速度 更適合進行範圍查詢 什麼情況下可以用到b樹索引 1 全值匹配的查詢 eg sn 1111 1111 1111 1111 2 匹配最左字首的查詢 eg sn 1111 3 匹配範圍值的查詢 eg sn sn 4...