mysql帮助手册 原文:
7.2.2 估算查询性能
对小表来说,通常情况下只需要搜索一次磁盘就能找到对应的记录(因为索引可能已经缓存起来了)。对大表来说,大致可以这么估算,它使用B树做索引,想要找到一条记录大概需要搜索的次数为:log(row_count) / log(index_block_length /3 * 2 / (index_length +data_pointer_length)) + 1。
对于我这样的数学白痴,乍看这个公式有点蒙,自己算下,加深记忆:
磁盘搜素次数=索引搜索次数+一次数据搜索
设索引块数为P,索引块存的行数为B=2/3*( index_block_length/ index_length +data_pointer_length) (其中2/3是索引填充率)
行数为R R = P*B
则B树的高度为lg(P),即为索引搜索次数X = lg(P) = lg(R/B) = log(R)/logB
表的索引需要的磁盘空间:R*2/3*( index_block_length/ index_length +data_pointer_length)