資料庫優化之MySQL優化 二 索引優化

2021-08-10 02:44:00 字數 2201 閱讀 2038

索引優化

分類:普通索引,唯一索引,主鍵索引,聯合索引

問題:如何選擇合適的列建立索引?

1:在where從句,group by從句,order by從句,on從句中出現的列

2:索引字段越小越好

3:離散度大的列放到聯合索引的前面

select * from payment where staff_id=2 and customer_id=584;

問:是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:重複索引

查詢的時候,如果載入重複索引越多,速度越慢。

錯誤示例:

create

table

user(

id int

notnull

primary

key,

username varchar(10) not

null.

address varchar(50) not

null,

unique(id) //這一句

)engine=innodb;

2:冗餘索引

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 子句中字段的多少並不會影響到讀取的資...