msql優化--索引優化
阿新 • • 發佈:2019-01-04
關於資料庫優化指標主要為:響應時間,掃描行數,返回行數。對於響應時間,主要體現在伺服器級別,伺服器效能,網路響應速度等;索引主要為了減少掃描行數;根據limit來限制返回行數。
常用的索引有:B-Tree索引,雜湊索引,空間索引,全文索引。除此之外,按照資料儲存方式可以分為聚集索引和非聚集索引。
【索引型別】
B-Tree索引 B-tree索引按照二叉樹的方式進行儲存,葉子頁儲存著索引的值,枝節點按照一定範圍進行儲存索引值。mysql查詢通過訪問枝節點快速定位到葉子節點,通過葉子節點儲存的行地址查詢到磁碟中的資料,這樣減少掃描資料行。1. 在多列索引中,必須按照最左列開始查詢,不然無法使用索引特性。例如上例:where條件不能使用last_name,first_name,dob的順序進行索引查詢
雜湊索引
雜湊索引只能精確匹配索引列值才能發揮作用,其儲存結構是將索引值通過雜湊演算法將鍵值進行儲存。且雜湊索引支援的資料引擎是memory,我們通用的InnoDB資料引擎是無法直接支援雜湊索引的,它可以通過自適應雜湊索引技術模擬雜湊索引的功能。聚簇索引
聚簇索引是InnoDB支援,但MyISAM資料引擎不支援的一種資料儲存方式。它將資料行放入到索引頁中,儲存方式與B-Tree索引及其相似。 InnoDB通過主鍵來聚集資料,如果沒有主鍵則通過唯一非空索引代替。如上圖,聚簇索引的索引值和資料儲存在一起,這樣訪問速度更快。它任有一些限制: 1. 聚簇索引將資料行全部放入記憶體中,訪問順序不在重要了。 2. 插入順序嚴重依賴殺入的位置,資料行的移動導致速度降低,因此不適合經常進入插入資料的表應用。 3. 當一個索引頁無法存放所有的資料時,出現索引頁斷裂的問題 4. 二次索引需要掃描全表,速度下降。