估計查詢性能
多數情況下,你可以通過計算磁盤的搜索次數來估算查詢性能。對于比較小的表,通常可以在一次磁盤搜索中找到行(因為索引可能已經被緩存了),而對于更大的表,你可以使用B-tree索引進行估算:你需要進行多少次查找才能找到行:log(row_count) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1
在MySQL中,index_block_length通常是1024字節(jié),數據指針一般是4字節(jié)。比方說,有一個500,000的表,key是3字節(jié),那么根據計算公式 log(500,000)/log(1024/3*2/(3+4)) + 1 = 4 次搜索。
該索引將需要500,000 * 7 * 3/2 = 5.2MB的存儲空間(假設典型的索引緩存的填充率是2/3),因此你可以在內存中存放更多索引,可能只要一到兩個調用就可以找到想要的行了。
但是,對于寫操作,你需要四個搜索請求來查找在何處放置新的索引值,然后通常需要2次搜索來更新索引并寫入行。
前面的討論并不意味著你的應用性能會因為log N而緩慢下降。只要內容被OS或MySQL服務器緩存,隨著表的變大,只會稍微變慢。在數據量變得太大而無法緩存后,將會變慢很多,直到你的應用程序受到磁盤搜索約束(按照log N增長)。為了避免這種情況,可以根據數據的增長而增加key的。對于MyISAM表,key的緩存大小由名為key_buffer_size的系統(tǒng)變量控制,詳見 Section 5.1.1, “Configuring the Server”