网站建设与维护工作,做教育行业营销类型的网站,公司网站微信推广,网上电商怎么做上次我们讲完了全表扫描的成本计算方法#xff0c;相信大家应该都理解了#xff0c;其实还是比较简单的#xff0c;今天我们来讲一下索引的成本计算方法#xff0c;因为除了全表扫描之外#xff0c;还可能多个索引都可以使用#xff0c;但是当然同时一般只能用一个索引相信大家应该都理解了其实还是比较简单的今天我们来讲一下索引的成本计算方法因为除了全表扫描之外还可能多个索引都可以使用但是当然同时一般只能用一个索引所以不同索引的使用成本都得计算一下。
这个使用索引访问数据的方式大家应该都还记得其实很简单除非你直接根据主键查那就直接走一个聚簇索引就ok了否则普通索引一般都是两步走先从二级索引查询一波数据再根据这波数据的主键去聚簇索引回表查询。
这个过程的成本计算方法稍微有点特别首先在二级索引里根据条件查一波数据的IO成本一般是看你的查询条件涉及到几个范围比如说name值在25100250350两个区间那么就是两个范围否则namexx就仅仅是一个范围区间。
一般一个范围区间就粗暴的认为等同于一个数据页所以此时可能一般根据二级索引查询的时候这个IO成本都会预估的很小可能就是1 * 1.0 1或者是n * 1.0 n基本就是个位数这个级别。
但是到此为止还仅仅是通过IO读取了二级索引的数据页而已这仅仅是二级索引读取的IO成本但是二级索引数据页到内存里以后还得根据搜索条件去拿出来一波数据拿这波数据的过程就是根据搜索条件在二级索引里搜索的过程。
此时就要估算从二级索引里读取符合条件的数据的成本了这需要估算一下在二级索引里会查出多少条数据这个过程就稍微有点复杂了不细讲了总之呢他会根据一个不是怎么太准确的算法去估算一下根据查询条件可能会在二级索引里查出多少条数据来。
估算出来之后比如估算可能会查到100条数据此时从二级索引里查询数据的CPU成本就是100 * 0.2 微调值总之就是20左右而已。
接着你拿到100条数据之后就得回表到聚簇索引里去查询完整数据此时先估算回表到聚簇索引的IO成本这里比较粗暴的直接默认1条数据就得回表到聚簇索引查询一个数据页所以100条数据就是100个数据页的IO成本也就是100 * 1.0 微调值大致是100左右。
接着因为在二级索引里搜索到的数据是100条然后通过IO成本最多回表到聚簇索引访问100个数据页之后就可以拿到这100条数据的完整值了此时就可以针对这100条数据去判断他们是否符合其他查询条件了这里耗费的CPU成本就是100 * 0.2 微调值就是20左右。
把上面的所有成本都加起来就是1 20 100 20 141这就是使用一个索引进行查询的成本的计算方法其实大家看明白这个过程了那么每一个索引的成本计算过程就都明了了假设你直接根据主键查询那么也参考上述估算过程就可以了那就不过是仅仅查询一个聚簇索引罢了。
总之上次讲到全表扫描发现成本是4100左右这次根据索引查找可能就141所以很多时候使用索引和全表扫描他的成本差距是非常之大的。所以一般就会针对全表扫描和各个索引的成本都进行估算然后比较一下选择一个成本最低的执行计划。
End