一、如何選擇合適的列建立索引
1、一般會選擇在where從句中,group by從句中,order by從句中 join on 從句中,建立索引,在特殊情況下select 從句中,所出的列,進行索引,當乙個索引包含了查詢中的所有列,那麼稱之為這樣的索引為覆蓋索引,當我們的查詢執行的頻率非常高,並且索引中查詢中所包含的列比較少的情況下,我們就會通過覆蓋索引的方式,對這個sql進行優化,使系統所需要的資料,完全通過索引就可以獲取,而不用查詢表的資料了。
2、索引的字段呢,也是越小越好的,因為資料庫中儲存資料是以頁數為單位的,如果在一頁中我們儲存的資料越多,那麼一次io操作所獲取的資料量也就會越大,這樣來說對我們的io效率會更高一些,所以的字段是越小越好。
3、我們在建立聯合索引的時候呢,我們要考慮把哪一列的放在聯合索引的前面是比較好的,因為聯合索引會包含多個列,哪一列索引放到前面會對我們的查詢優化率更好呢,首先我們要看哪一列離散程度更高,往往離散度越大的列選擇性越高,因此放到聯合索引的前面的效果是越好,通過乙個例子來看一下如何來判斷這個列的離散度,
二、索引優化sql的方法
刪除重複及冗餘索引,
重複索引是指相同的列以相同的順序建立的同型別的索引,如下表primarykey 和unique(id)列上的索引就是重複索引
create table test (id int not null primary key, name varchar(10) not null,titile varchar(50) not nll,unique(id))engine = innodb;
冗餘索引是指多個索引的字首列相同,或是在聯合索引中包含了主鍵的索引,下面這個例子中key(name,id)就是乙個冗餘索引,id是主鍵,聯合索引key(name,id)包含了id主鍵,所以是冗餘索引
create table test(id int not null primary key,name varchar(10) not null, title varchar(50) not null,key(name,id))engine=innodb;
如何找到重複索引 ,提供乙個工具檢查重複及冗餘索引
使用pt-duplicate-key-checker工具檢查重複及冗餘索引
pt-duplicate-key-checker -uroot -p『123456』 -h 127.0.0.1
三、索引維護的方法
看哪些索引是不使用的,在mysql中通過慢查日誌配合pt-index-usage 工具來進行索引使用情況的分析。
pt-index-usage -uroot -p'123456' mysql-slow.log
資料庫優化之MySQL優化 二 索引優化
索引優化 分類 普通索引,唯一索引,主鍵索引,聯合索引 問題 如何選擇合適的列建立索引?1 在where從句,group by從句,order by從句,on從句中出現的列 2 索引字段越小越好 3 離散度大的列放到聯合索引的前面 select from payment where staff id...
MySQL 資料庫效能優化之索引優化
資料庫效能優化專題 系列的第三篇文章 mysql 資料庫效能優化之索引優化 大家都知道索引對於資料訪問的效能有非常關鍵的作用,都知道索引可以提高資料訪問效率。為什麼索引能提高資料訪問效能?他會不會有 是不是索引建立越多,效能就越好?到底該如何設計索引,才能最大限度的發揮其效能?這篇文章主要是帶著上面...
MySQL 資料庫效能優化之索引優化
大家都知道索引對於資料訪問的效能有非常關鍵的作用,都知道索引可以提高資料訪問效率。為什麼索引能提高資料訪問效能?他會不會有 是不是索引建立越多,效能就越好?到底該如何設計索引,才能最大限度的發揮其效能?這篇文章主要是帶著上面這幾個問題來做乙個簡要的分析,同時排除了業務場景所帶來的特殊性,請不要糾結業...