索引優化
分類:普通索引,唯一索引,主鍵索引,聯合索引
問題:如何選擇合適的列建立索引?
1:在where從句,group by從句,order by從句,on從句中出現的列select * from payment where staff_id=2 and customer_id=584;2:索引字段越小越好
3:離散度大的列放到聯合索引的前面
問:是index(sftaff_id,customer_id)好還是index(customer_id,staff_id)好?
答:由於customer_id離散度更大,所以應該使用index(customer_id,staff_id)
離散度:資料唯一值越多,離散度越高。
例如: select count(distinct id),count(distinct real_name) from user;
增加索引有利於加快查詢效率,但也降低寫入效率
索引的維護及優化:重複及冗餘索引
重複索引是指相同的列以相同的順序建立的同型別的索引,如下表中primary key和id列上的索引就是重複索引
索引維護工具create
table test(
id int
notnull
primary
key,
name varchar(10) not
null,
title varchar(50) not
null,
unique(id)
)engine=innodb;
pt-duplicate-key-checker
用法:
pt-duplicate-key-checker \
-u root \
-p 『123456』 \
-h 127.0.0.1
錯誤索引的結果:降低所有操作的效率。
錯誤索引列表:
1:重複索引
查詢的時候,如果載入重複索引越多,速度越慢。
錯誤示例:
2:冗餘索引create
table
user(
id int
notnull
primary
key,
username varchar(10) not
null.
address varchar(50) not
null,
unique(id) //這一句
)engine=innodb;
innodb中,每個索引都會自動新增上主鍵,所以索引不用新增主鍵。
錯誤示例:
索引的優點:create
table
user(
id int
notnull
primary
key,
username varcher(10) not
null,
address varchar(50) not
null,
key(name,id)
)engine=innodb;
1:提高查詢的效率:select
索引的缺點:
1:降低寫入的效率:insert update delete
索引維護的方法之刪除不用的索引
在mysql中目前只能通過慢查詢日誌配合pt-index-usage工具來進行索引使用情況的分析。
pt-index-usag \
-uroot -p 『』 \
mysql-slow.log
總結:
pt-duplicate-key-checker 檢查多餘key
pt-index-usage 索引檢查
pt-query-digest 慢查詢分析
mysql資料庫優化之索引優化
一 如何選擇合適的列建立索引 1 一般會選擇在where從句中,group by從句中,order by從句中 join on 從句中,建立索引,在特殊情況下select 從句中,所出的列,進行索引,當乙個索引包含了查詢中的所有列,那麼稱之為這樣的索引為覆蓋索引,當我們的查詢執行的頻率非常高,並且索...
資料庫之優化二
前面也有一些優化的策略,現在在看看一些優化關於group by 語句 order by語句 等。b 優化group by語句 b 預設情況下,mysql對所有group by col1,col2.的字段進行排序。這與在查詢中指定order by col1,col2.類似。因此,如果顯式包括乙個包含相...
MySQL 資料庫效能優化之SQL優化
hosted on dreamhost 可以通過我的折扣碼imysqler獲得優惠折扣 有人反饋之前幾篇文章過於理論缺少實際操作細節,這篇文章就多一些可操作性的內容吧。盡量避免 select 很多人看到這一點後覺得比較難理解,上面不是在誤區中剛剛說 select 子句中字段的多少並不會影響到讀取的資...