MySQL高階學習記錄 17 索引簡介

2021-10-24 03:12:17 字數 2872 閱讀 5624

效能下降sql變慢,執行時間長、等待時間長,原因以及優化方法:

1 資料過多 - 分庫分表

2 關聯了太多的表,太多join - sql優化

3 沒有充分利用到索引 - 索引建立(優化效果最好)

4 伺服器調優及各個引數設定 - 調整my.cnf

索引是什麼?

》索引是資料結構,幫助mysql高效獲取資料的資料結構。排好序的快速查詢資料結構。

》索引不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在硬碟上

索引的優勢

-提高資料檢索效率,降低資料庫的io成本

-通過索引對資料進行排序,降低資料排序的成本,降低cpu消耗

索引的劣勢

-降低更新表的速度

-索引本身也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄,所以索引列也要占用空間

索引結構

索引是在mysql的儲存引擎層中實現的,而不是在伺服器層實現的。

-btree索引★:多路平衡搜尋樹,btree與二叉樹對比,查詢資料的效率更高,因為對於相同的資料量來說,btree的層級結構比二叉樹小,因此搜尋速度更快。

-b+tree索引:是btree索引的變種,葉子節點儲存所有的key資訊,所有非葉子節點都可以看做是 key的索引部分。由於b+tree只有葉子節點儲存key資訊,查詢任何key都要從root走到葉子,因此查詢效率更加穩定。

-聚簇索引和非聚簇索引

索引分類

檢視表中的索引

建立索引

#建立單值索引

create

index

[indexname]

on table_name(

column);

#建立唯一索引

create

unique

index

[indexname]

on table_name(

column);

#此處的column需要是唯一約束

#建立主鍵索引:設定為主鍵後資料庫會自動建立索引,innodb為聚簇索引,一般不建議更改主鍵索引

#復合索引:對多個字段建立乙個索引

create

index

[indexname]

on table_name(column1, column2,...);

舉例1:對員工表中的姓名建立索引【單值索引】

create

index idx_name on employees(last_name)

;#此時再檢視索引情況如下

案例2:【復合索引】對學生表中的姓名sname和性別s***建立索引

create

index idx_name_gender on student(sname, s***)

;#建立該索引前,表中只有乙個主鍵索引

相當於建立了2個索引:

對 sname建立索引;

對 sname, s***建立索引;

刪除索引

drop

index indexname on tablename;

舉例:刪除員工表中的姓名索引 idx_name

drop

index idx_name on employees;

#檢視當前員工表索引情況

alter 命令調整索引

alter

table tablename add

primary

key(columnname)

;#以上語句為表新增主鍵索引,索引是唯一的,不能是null

alter

table tablename add

unique index_name(columnname)

;#以上語句建立索引的值必須是唯一的(除了null之外,null可能出現多次)

alter

table tablename add

index index_name(columnname)

;#以上語句新增普通索引,索引值可以出現多次

alter

table tablename add fulltext index_name(columnname)

;#以上語句指定了索引為fulltext,用於全文索引

索引的設計原則

10.1 哪些情況需要建立索引

》 主鍵自動建立唯一索引

》 頻繁作為查詢條件的字段應該建立索引

》 查詢中與其他表關聯的字段,外來鍵關係建立索引

》 單鍵、組合索引的選擇問題,組合索引價效比更高

》 查詢中排序的字段,排序字段如果通過索引去訪問,將大大提高排序速度

》 查詢中統計或者分組字段

10.2 哪些情況不需要建立索引

》 表記錄太少

》 經常增刪改的表或者字段

》 where條件裡用不到的字段不建立索引

》 過濾性不好的不適合建索引

mysql高階索引 Mysql高階 索引優化全解

是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...

mysql高階 索引

mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...

mysql 高階 索引

綠色代表值,黃色代表指標,藍色為磁碟塊,灰色表示沒有對應區域的資料。磁碟塊1中,p1指向數值小於17的磁碟塊,p2指向數值大於17小於35的磁碟塊,p3指向大於35的磁碟塊 尋找值為29 磁碟塊1中,29大於17小於35,由磁碟塊1的p2指向磁碟塊3 磁碟塊3中,29大於36小於30,由磁碟塊3的p...