高性能索引

高性能的索引策略:

1、獨立的列:

即始終將索隱裂單獨放在比較符號的一側

例如下面這條sql語句就不是獨立的列:

select actor_id from test.actor where actor_id + 1 = 5

應當使用獨立的列才可以使之走索引:

select actor_id from test.actor where actor_id = 6

2、前綴索引和索引的選擇;優點為索引校小,缺點是不能做order by 和group by:

有時候需要索引很長的字符列(某個數據列的字符很大很長,例如存儲url的列、blob列、TEXT列),這會讓索引變得大且慢,一個策略是模擬哈希索引,有時候這樣做還不夠,通常可以索引開始的部分字符,這樣可以大大節約索引空間,從而提高索引效率,但這樣會降低索引的選擇性。訣竅是選擇足夠長的前綴以保證較高的選擇性,同時又不能太長(以便節約空間)。

前綴索引選擇實例:

selelct count(distinct left(city, 3)) / count(*) as sel from test.city;

sel越大,對應自變量left所選擇的字符數3越大,選擇性越高;當變化的幅度由大變小時即可定位為選擇性最優,這樣就兼顧了長前綴且高選擇性且索引值最小。

創建綴索引創建實例:

mysql>alter table test.city add key (city(7));

--這裡多次嘗試只有 left(city, 7)是最優解,所以這裡選擇7個字符的前綴作為索引。

3、多列索引

>當出現服務器對多個索引做相交操作時(通常由多個and條件),通常意味著需要一個包含多有相關列的多列索引,而不是多個獨立的單列索引。

>當服務器對多個索引做聯合操作時(通常有多個or條件)通常需要消耗大量的cpu和內存資源 在算法的緩存、排序和合並上,特別 是當其中有些索引的選擇性不高,需要合併掃描返回的大量數據的時候。

4、選擇合適的索引列順序

對於如何選擇索引的列順序有一個經驗法則:將選擇性最高的列放到索引最前列。


分享到:


相關文章: