估計查詢性能 |
發(fā)布時間: 2012/8/30 17:26:41 |
在大多數(shù)情況下,可以通過計算磁盤搜索來估計性能。對小的表,通常能在1次磁盤搜索中找到行(因為索引可能被緩存)。對更大的表,可以使用B-樹索引進行估計,將需要log(row_count)/log(index_block_length/3 * 2/(index_length + data_pointer_length))+1次搜索才能找到行。
在MySQL中,索引塊通常是1024個字節(jié),數(shù)據(jù)指針通常是4個字節(jié),這對于有一個長度為3(中等整數(shù))的索引的500,000行的表,通過公式可以計算出log(500,000)/log(1024/3*2/(3+4))+1= 4次搜索。 上面的索引需要大約500,000 * 7 * 3/2 = 5.2MB,(假設典型情況下索引緩存區(qū)填充率為2/3),可以將大部分索引保存在內(nèi)存中,僅需要1-2調(diào)用從OS讀數(shù)據(jù)來找出行。
然而對于寫,將需要4次搜索請求(如上)來找到在哪兒存放新索引,并且通常需要2次搜索來更新這個索引并且寫入行。
注意,上述討論并不意味著應用程序的性能將緩慢地以logN 退化!當表格變得更大時,所有內(nèi)容緩存到OS或SQL服務器后,將僅僅或多或少地更慢。在數(shù)據(jù)變得太大不能緩存后,將逐漸變得更慢,直到應用程序只能進行磁盤搜索(以logN增加)。為了避免這個問題,隨數(shù)據(jù)增加而增加 鍵高速緩沖區(qū)大小。對于MyISAM表, 由key_buffer_size系統(tǒng)變量控制 鍵高速緩沖區(qū)大小。 本文出自:億恩科技【xuefeilisp.com】 |