ITPub博客

首页 > 数据库 > 数据库开发技术 > 如果数据库有这个功能。。

如果数据库有这个功能。。

原创 数据库开发技术 作者:丁奇3306 时间:2024-08-15 10:02:45 0 删除 编辑

最近帮群友调SQL语句,发现执行计划偏离的例子很多,而用上force就好了。据说测试时和刚上线时候都是对的。这也不是新问题,笔者最早碰到这个情况是上一个龙年了。。

当然 force index是比较危险的做法,毕竟随着数据变化,一开始程序员预设的那个索引可能不是最优的了,而相比于偶尔选错索引,大多数时候,数据库优化器还是能够做出正确选择的,应该尊重。

于是就冒出这么个想法:如果数据库支持hint,让语句指定一个“预期索引”,然后优化器该干嘛干嘛,只是在语句执行结束后,对于“预期索引”和“实际使用索引”不一致的情况,输出个日志到诊断信息里,让程序员有个机会介入,不论是发现异常还是找机会修改正确的expected index,是不是可以减少以后“出大事”的可能性? 

“需求”长这样:

select 语句支持hint, 比如 select .. from t /* expected index(indx1) */ ...语句执行结束后,若使用的是indx1,就正常结束;若不是,则将SQL、实际使用索引、扫描行数等记录到warning、slow log 或 errorlog中。也就是说这个hint只是提供辅助信息,并不影响语句执行。

然后各家的智能诊断系统就可以上去工作了,虽然有这个日志,不需要什么智能就可以干活了。

我知道的那些数据库是都还没有见过有这种功能的,不知道有没有已经做过的,分享下最佳实践啥的。

PS问:如果你是业务开发的Leader,DBA跟你说现在有这个功能,并且配套的采集和告警机制也做好了。你会要求开发团队成员在写SQL的时候,都加上这个expected index的hint吗?


原文作者:丁奇3306;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    104
  • 访问量
    44852