關於索引

索引思路mysql

若是有一大堆數據讓你去檢索其中某一條,好比學生成績單,按照學號去查考試成績,最多見的思路是從頭查到尾,可是若是數據量很大,固然查起來很慢。可是若是這些數據排好順序,你還須要從頭查到尾麼?二分法查起來最快,先查中間,而後看學號是大仍是小,而後遞次往前或日後二分查找,理解這一點,數據索引對查詢效率的影響就豁然開朗了。算法

在innodb中,是按照主鍵創建的聚簇索引,所以基本上來講主鍵是惟一的,不爲空,並且索引的結構自己是有序的,平衡樹。若是你對於一個沒有輔助索引的行進行查找,是須要全表掃描,不然能夠創建一個輔助索引,按照該列進行了基於B+樹的排序。所以當你再去定位的時候,可以再也不僅僅是經過掃描全表,而是根據二叉樹的方式去查找,O(N)與O(logN)的區別,所以可以更快的定位到了須要查詢的主鍵,而後根據主鍵再去定位到了具體的行。sql

總結:索引的做用就是改變了查找的方式,全表掃描是最慢的方式。數據庫

mysql 全文索引緩存

只能在MyISam的數據庫表中建立的。一種特殊的索引,它會把某個數據表的某個數據列出現過的全部單詞生成一份清單。排序

where match(column1,column2) against('word1 word2 word3')>0.001 match ... against 把column1,column2數據列中至少包含word1,word2,word3三個單詞之一的數據記錄查找到索引

innodb中的hash算法內存

  1. 例子:128G的內存中,如何可以快速的找到某一個被緩存的額頁。雖然一方面內存的查詢速度很快,可是也不能每次都是遍歷整個內存去查找,此時的字典操做只須要O(1)的速度就可以查到須要的數據。於是利用到了直接尋址的表
  2. 通常用連接法來解決hash存在的碰撞問題。也是由於碰撞問題,形成了hash的效率下降
  3. hash的索引僅僅只能知足「=」,「in","<=>"

因爲 Hash 索引比較的是進行 Hash 運算以後的 Hash 值,因此它只能用於等值的過濾,不能用於基於範圍的過濾,由於通過相應的 Hash 算法處理以後的 Hash 值的大小關係,並不能保證和Hash運算前徹底同樣。

   4. Hash 索引沒法被用來避免數據的排序操做。

因爲 Hash 索引中存放的是通過 Hash 計算以後的 Hash 值,並且Hash值的大小關係並不必定和 Hash 運算前的鍵值徹底同樣,因此數據庫沒法利用索引的數據來避免任何排序運算;

   5. Hash 索引不能利用部分索引鍵查詢。

對於組合索引,Hash 索引在計算 Hash 值的時候是組合索引鍵合併後再一塊兒計算 Hash 值,而不是單獨計算 Hash 值,因此經過組合索引的前面一個或幾個索引鍵進行查詢的時候,Hash 索引也沒法被利用。

   6. Hash 索引在任什麼時候候都不能避免表掃描。hash

相關文章
相關標籤/搜索