mysql索引及其優化

2021-10-03 03:53:43 字數 3218 閱讀 4588

10.效能優化

1.建立索引

create

[unique

| fulltext | spatial]

index 索引名 on 表名(欄位名)

[using 索引方法];

2.刪除索引

drop

index 索引名

3.檢視索引

show

index

on tablename;

1.查詢語句寫的爛

2.索引失效:單值索引, 復合索引

3.關聯太多的join(設計缺陷或者不得一的需求)

4.伺服器調優以及各個引數設定(快取, 執行緒數)

加快查詢

減少排序

增加間隙鎖,減慢更新資料的速度

花時間來建立優化的索引

單值索引:只含單個列

唯一索引:索引中的值唯一,可以為空

復合索引:含有多個列的索引

b樹hash

r樹全文

主鍵自動建立索引(王者中的使用者名稱和所在區不會是聯合主鍵吧???不讓經常更新,並且**什麼的使用使用者名稱和分割槽就可以進行了!)

外來鍵建立索引

用於分組統計、排序的字段建立索引

高併發傾向於建立聯合索引

頻繁查詢的字段建立索引

where中用不到的字段,比如使用者自己的簡介

頻繁更新的字段不講理索引

表的記錄很少 3 million以下

資料中重複率太高

使用type

extra

rowpossilble key

keytable

idref

2. 慢查詢日誌

4.批量資料指令碼

5.show profile

6.全域性日誌查詢

7.總體思路

慢查詢日誌的開啟並捕獲。

explain + sql的分析。

show profile查詢sql在伺服器中的執行細節和宣告週期。

sql 資料伺服器的引數調優。

1. 單錶連線

2.兩表連線

1.左右連線加相反索引(左連線加右邊表, 右連線加左邊表)

3.三表優化案例

小表驅動大表

先優化子集

保證join的表已經有了優化語句

不要吝嗇join buffer

4.索引優化原則

全值匹配我最愛

create

index

onuser a(

'c',

'd',

'e')

;select

*from

user

where c =

'x';

#可以用到索引

select

*from

user

where d =

'y'and e =

'z'#索引失效了

第二個違背了最佳左字首法則:

建立索引的第一字段不能丟(索引失效)

建立索引的中間字段不能斷(否則部分使用索引)

不在索引上做任何函式操作(計算,函式,型別轉化)

select

*from

user

where

left

(id,4)

=1;#在索引left上使用了函式

使用範圍之後全失效,盡量選擇(select)索引的字段

select

*from

user

where id =

4and age >

1and name =

"te"

;#使用了範圍

範圍之後的就失效了, id會用到索引,但是age和age之後就會出現索引失效

select id, age, name where id =

4and age >

1and name =

"te"

#會使用索引,所以仍舊是使用索引

使用 <>, != ,is null, null ,is not null ,like "%name"等時候也會導致索引失效

select

*from name where name like

"%name"

;#索引失效

select

*from name where name like

"name%"

;#like 百分在右邊

如果非得載入左邊應該怎麼樣呢?

使用覆蓋索引

create

index

onuser idx_name_age(

`name`

,`age`);

select name,

from

user

where name like

"%tea%"

;

varchar 型別一定加上單引號

select

*from name =

'3000'

;select

*from name =

3000

;#索引失效

都能查到,但是出現了隱式的型別轉換

帶頭大哥不能死, 中間兄弟不能斷; like 後邊百分號,字串型別加引號,範圍之後全失效。

group by 有可能產生臨時表

小表驅動大表。

select

*from a where id in

(select id from b)

;#b表小於大表

select

*from a where

exists

(select id from b)

;#a表小於大表

exists就是把a中的字段放入子查找尋中進行比較。

mysql 索引及其優化

2 索引的常見模型 雜湊表,有序陣列,搜尋樹。2.1 雜湊表適用於等值查詢,因為不是有序的所以新增乙個數時會比較快,查詢乙個範圍時就必須全部掃瞄一遍 2.2 有序陣列和雜湊表不同,查詢乙個具體的值 範圍比較方便 二分法可快速查詢,插入乙個數值時就比較慢,需要移動資料,適用於靜態儲存引擎 2.3 搜尋...

mysql 優化 聚集索引 mysql 索引優化

一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...

mysql索引優化原則 MySQL 索引優化原則

索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...