效能下降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...