其实这个说法有点“以偏概全”了:数据库并不是“爱用”贪心算法,而是在很多具体场景里,贪心是一种“性价比很高”的近似最优解策略。数据库系统内部既有贪心,也有动态规划、穷举、代价模型、启发式搜索等。
可以从几个角度理解为什么数据库经常用到贪心算法。
数据库很多问题是组合优化问题,例如:
这些问题理论上往往是指数级的。
举个例子:
n 张表 JOIN,可能的 JOIN 顺序大约是
[
(2n-2)! / (n-1)!
]
张表一多,穷举根本不可行。
贪心思路:每次选“当前代价最小的两张表先 JOIN”,一步步往下做。
虽然不是全局最优,但:
数据库里有一个非常关键的东西:Cost Model(代价模型)
例如:
贪心算法依赖“当前局部最优”,而数据库正好能:
所以贪心在数据库里不是“瞎贪”,而是基于代价估计的贪心。
有些问题天然适合贪心,例如:
这本质上是贪心:
“现在看,先这么做最划算”
这些虽然是“近似贪心”,但简单高效。
数据库是工业级系统,要求:
动态规划或穷举:
贪心:
所以在“优化器时间”和“执行时间”之间,数据库往往选择折中。
实际上主流数据库优化器通常是混合策略:
比如 PostgreSQL、Oracle、MySQL 的优化器都不是纯贪心。
数据库“爱用”贪心,不是因为它最聪明,而是因为它在巨大搜索空间 + 实时性要求 + 工程复杂度之间,是最现实的选择。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。