top
Loading...
7.2.2.估計查詢性能
7.2.2. 估計查詢性能

在大多數情況下,可以通過計算磁盤搜索來估計性能。對小的表,通常能在1次磁盤搜索中找到行(因為索引可能被緩存)。對更大的表,可以使用B-樹索引進行估計,將需要log(row_count)/log(index_block_length/3 * 2/(index_length + data_pointer_length))+1次搜索才能找到行。

MySQL中,索引塊通常是1024個字節,數據指針通常是4個字節,這對于有一個長度為3(中等整數)的索引的500,000行的表,通過公式可以計算出log(500,000)/log(1024/3*2/(3+4))+1= 4次搜索。

上面的索引需要大約500,000 * 7 * 3/2 = 5.2MB(假設典型情況下索引緩存區填充率為2/3),可以將大部分索引保存在內存中,僅需要1-2調用從OS讀數據來找出行。

然而對于寫,將需要4次搜索請求(如上)來找到在哪兒存放新索引,并且通常需要2次搜索來更新這個索引并且寫入行。

注意,上述討論并不意味著應用程序的性能將緩慢地以logN 退化!當表格變得更大時,所有內容緩存到OSSQL服務器后,將僅僅或多或少地更慢。在數據變得太大不能緩存后,將逐漸變得更慢,直到應用程序只能進行磁盤搜索(logN增加)。為了避免這個問題,隨數據增加而增加 鍵高速緩沖區大小。對于MyISAM, key_buffer_size系統變量控制 鍵高速緩沖區大小。參見7.5.2節,“調節服務器參數”。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html
北斗有巢氏 有巢氏北斗