概述
上一篇主要减少了预处理和简单索引推荐部分,这篇主要介绍复杂索引推荐和MCTS的具体实现。
代码解析
index_advisor_workload()
1:复杂索引推荐
①:生成原子索引:一条query的所有索引会进行1到k的组合C,n为索引数,k为1到n。一个原子索引包含普通索引和联合索引。
①-①:
①-②:把所有query的索引组合去重后放入atomic_config_total中,is_same_config的判断依据是:首先判断列表的长度是否相等,然后两个列表的每个元素依次对比(表名,列名,索引类型是否相等),但凡有一个不相等,这两个列表就不相等。
②:遍历每个原子索引,计算增加该原子索引后的cost
③:基于蒙特卡洛搜索树推荐索引。用蒙特卡洛方法估算每一种走法的胜率。通过不断的模拟每一种走法,直至终局,该走法的模拟总次数N,与胜局次数W,即可推算出该走法的胜率为 W/N。通过随机的对游戏进行推演来逐渐建立一棵不对称的搜索树的过程。
③-①:蒙特卡洛搜索树实现。
③-①-①:选择和扩展:
③-①-②:随机选择未执行的动作计算奖励
③-①-③:回溯:自下而上将模拟的结果反向传播到父结点中
③-①-④:使用UCB算法,权衡探索和开发选择得分最高的子节点。
③:贪婪决策算法推荐索引
以上就是基于负载的索引推荐的代码解析,有一些细节被省略了,更细节的部分可以去看源码。前几天dbmind更新了异常检测和报警模块,后面我也会把该模块的源码解析更新出来。
最后修改时间:2022-09-10 19:36:59
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。