“数据库贪心算法”这个说法,在数据库领域里并不是一个像“B+树”“事务隔离”那样的标准专有名词。通常大家说的数据库里的贪心算法,是指在数据库查询优化、调度、索引选择等场景中,使用“贪心策略”来近似求解最优解的一类方法。
下面从原理、典型场景和例子三个方面说明。
贪心算法的核心是:
每一步都选择当前看起来最优的方案,期望最终得到全局较优(或最优)结果。
特点:
问题:
多个表 JOIN 时,连接顺序会影响代价(IO、CPU)。
穷举问题:
贪心做法(典型):
✅ 优点:快
❌ 缺点:可能错过更优顺序
问题:
给定查询负载,选哪些索引能最小化总代价?
贪心算法:
这属于 贪心集合覆盖(Greedy Set Cover) 思路。
很多数据库优化器:
例如:
在锁调度、事务排序中:
这也是一种贪心策略(最短作业优先)。
原因很现实:
| 原因 | 说明 |
|---|---|
| 搜索空间巨大 | 表多、索引多 |
| 实时性要求高 | 不能优化半天 |
| 近似解可接受 | 慢 5% 没关系 |
| 易于实现 | 工程上稳定 |
数据库中的贪心算法,就是用“每一步都选当前最好”的方式,在查询优化、索引选择和调度中快速得到一个足够好的方案,而不是穷举所有可能。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。