您現在的位置是:首頁 > 棋牌

評估sql查詢效能

  • 由 流浪劍客26 發表于 棋牌
  • 2022-01-19
簡介在資料量大的情況下,你能夠使用B-tree樹索引來評估你需要多少次定址去找到一行記錄:(假設索引填充率為 23)log(row_count)log(index_block_length3 * 2(index_length

填充率怎麼算

評估sql查詢效能

從最簡單原理理解資料庫最佳化

在絕大多數情況下,你可以透過計算磁碟定址次數來評估sql查詢效能。在資料量小的情況下,你通常可以透過一次磁碟定址找到一行記錄(因為索引可能已經被快取)。在資料量大的情況下,你能夠使用B-tree樹索引來評估你需要多少次定址去找到一行記錄:(假設索引填充率為 2/3)

log(row_count) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1

在MySQL中一個索引塊通常佔用1024位元組,資料指標佔用4位元組。假設一個有500,000資料量的表,表中有一個佔用3位元組的索引(如:MEDIUMINT),套用公式:

log(500,000) / log(1024 / 3 * 2 / (3 + 4)) + 1 = 4

索引需要 500,000 * 7 * 3 / 2 = 5。2M (假設索引填充率為 2/3) 的磁碟空間, 可能有很多資料儲存在記憶體中,因為僅僅需要一次或兩次的地區呼叫找到目標資料。

然而,寫入的時候,你需要4次定址找到索引存放地址,兩次定址去更新索引和行資料。

以上的討論並不意味著你的應用效能會變差。一旦資料被 OS(作業系統) 或 Mysql server 快取,伴隨著單表資料量的提升sql查詢僅會有輕微變慢。當數量變得太大而無法快取,查詢效能將會變得更糟,最終所有的查詢都會透過定址來獲取結果。為了避免這種情況,隨著資料量的增長,索引快取大小也會增長。對於 MyISAM表來說,索引快取可以透過系統變數

key_buffer_size

來控制。

Top