關於索引以及緩衝池的一些疑惑

2021-10-23 04:24:47 字數 1322 閱讀 1736

如果某個資料經常被訪問,當滿足一定條件的時候,就會將這個資料頁的位址存放到 hash 表中。這樣下次查詢的時候,就可以直接找到這 個頁面的所在位置。

需要說明的是自適應 hash 索引只儲存熱資料(經常被使用到的資料),並非全表資料。因 此資料量並不會很大,因此自適應 hash 也是存放到緩衝池中,這樣也進一步提公升了查詢效 率。

hash 表是陣列 + 鍊錶的形式。通過 hash 函式可以計算索引鍵值所對應的 bucket(桶) 的位置,如果產生 hash 衝突,就需要遍歷鍊錶來解決。

缺點hash 索引僅能滿足(=)(<>)和 in 查詢,不能使用範圍查詢。此外,資料的儲存是沒有順序的,在 order by 的情況下,使用 hash 索引還需要對資料重新排序。而對於聯合索引的情況,hash 值是將聯合索引鍵合併後一起來計算的,無法對單獨的乙個鍵或者幾個索引鍵進行查詢。

優點因為 hash 索引在進行資料檢索的時候效率非常高,通常只 需要 o(1) 的複雜度,也就是一次就可以完成資料的檢索。

假設我們有 x、y、z 三個字段,建立聯合索引(x, y, z)之後,我們可以把 x、y、z 分別類 比成「百分位」、「十分位」和「個位」。

1.查詢「y=8 and z=7」,就用不上索引了,因為可能存在 187、287、387、487………這 樣就必須掃瞄所有數值。

2.當我們查詢「x=9 and y>8 and z=7」的時候,如果建立了 (x,y,z) 順序的索引,這時候 z 是用不上索引的。這是因為 mysql 在匹配聯合索引最左字首的時候,如果遇到了範圍查 詢,比如()和 between 等,就會停止匹配。索引列最多作用於乙個範圍列,對於後面的 z 來說,就沒法使用到索引了。

最後你需要記住,如果我們遇到了範圍條件查詢,比如()(>=)和 between 等,那麼範圍列後的列就無法使用到索引了

innodb 儲存引擎基於磁碟檔案儲存,訪問物理硬碟和在記憶體中進行訪問,速度相差很大,為了盡可能彌補這兩者之間 i/o 效率的差值,我們就需要把經常使用的資料載入到緩衝池中,避免每次訪問都進行磁碟 i/o

位置決定效率,提供緩衝池就是為了在記憶體中可以直接訪問資料。

頻次決定優先順序順序。因為緩衝池的大小是有限的,比如磁碟有 200g,但是記憶體只 有 16g,緩衝池大小只有 1g,就無法將所有資料都載入到緩衝池裡,這時就涉及到優先順序 順序,會優先對使用頻次高的熱資料進行載入。

緩衝池的作用就是提公升 i/o 效率,而我們進行讀取資料的時候存在乙個「區域性性原理」, 也就是說我們使用了一些資料,大概率還會使用它周圍的一些資料,因此採用「預讀」的機 制提前載入,可以減少未來可能的磁碟 i/o 操作。

關於z index的一些疑惑

當我使用z index這個屬性的時候,為了實現首頁的banner圖,我還同是用到了乙個bootstrap的carousels外掛程式,然後我就鬱悶了,開始沒有發現,然後出現了在360瀏覽器上當banner滑動的時候我的頭部居然閃爍的現象,開始一直找不到原因。最後仔細的觀察居然是這個屬性的問題就是z ...

關於Marching Cube的一些疑惑思考

最近學習mc表面繪製,對於開始對於cg方面的一些知識不是很明白,搞的一頭霧水,於是就零零碎碎參考一些網上的程式來學習。主要參考的有3d med 的手冊,網上的一些程式,如 以及跟蹤vtk源 還有這個 但是在閱讀的時候產生的兩個疑惑,表示怎麼算出來的,看了書上的不是很明白,另乙個問題是得到的三角麵片怎...

一些關於ubuntu安裝的疑惑

安裝ubuntu在虛擬機器下,已經安裝成功了,但是有一點疑問。在虛擬機器下,安裝完成後,cd rom ide 的connection選項上,為什麼兩個都可以選。就是use the physical drives和use iso image 兩個選項為什麼都可以,如果是iso還可以理解,但是 use ...