mysql 索引管理 MySQL索引管理

2021-10-20 01:38:21 字數 1070 閱讀 5601

該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓

正確使用索引

首先,我們得有乙個認識,建立索引確實可以幫助我們加速查詢,而且可以建立輔助索引,但並不是說我們把每個欄位都給加上輔助索引然後就會很方便,其實在索引存在很多的時候,會讓應用程式的效能受到影響,在建立多少索引這問題上,應該找到乙個平衡點。

其次,在我們新增了索引以後並不是一定查詢速度就很快,這和我們如何去查詢有關,比如下面幾種情況:

1,範圍問題、或者條件不明確,條件**現這些符號或關鍵字:>,=,<=,!=,between and

出現上面的情況相當於不是精確查詢,而是給的乙個範圍或者是模糊查詢,這導致查詢的時候還得去一一進行比較,所以效率也不高,當我們查詢的範圍越大時,肯定是越慢的,當查詢範圍越小時,肯定是越快的

2,like

當查詢條件**現like時,若沒有%,_符號時,如『xx』就是精確查詢,速度很快的;當有符號時,當符號在前時,如『%xx』,根據最左匹配原則,肯定先匹配%,由於%代表任意字元,所以會導致把所有的資料都要匹配一下,這效率沒有提高;但當符號在後就不一樣了,如『xx%』,根據最左匹配原則,先匹配上xx,此時就可以把很多給直接排除,導致速度也很快。

3,盡量選擇區分度高的字段作為索引,比如我們選擇性別作為索引,不是男的就是女的,在查詢的時候回得到很多資料,這樣也會很慢,而且沒有實際意義

我們編寫儲存過程為表s1批量新增記錄,name欄位的值均為egon,也就是說name這個欄位的區分度很低(gender欄位也是一樣的,我們稍後再搭理它)回憶b+樹的結構,查詢的速度與樹的高度成反比,要想將樹的高低控制的很低,需要保證:在某一層內資料項均是按照從左到右,從小到大的順序依次排開,即左1

name欄位所有的值均為'egon'#現在我們得出乙個結論:為區分度低的字段建立索引,索引樹的高度會很高,然而這具體會帶來什麼影響呢???#1:如果條件是name='***x',那麼肯定是可以第一時間判斷出'***x'是不在索引樹中的(因為樹中所有的值均為'egon』,看第一條的時候就知道你不在索引樹裡面了),所以查詢速度很快#2:如果條件正好是name='egon',查詢時,我們永遠無法從樹的某個位置得到乙個明確的範圍,只能往下找,往下找,往下找。。。這與全表掃瞄的io次數沒有多大區別,所以速度很慢

mysql 雜湊索引 MySQL索引之雜湊索引

雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...

mysql主鍵索引 MySQL索引之主鍵索引

在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...

mysql聚集索引 MySQL索引之聚集索引介紹

在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...