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 ...