【问题标题】:Is Greedy Algorithm always best for choosing proper indexes for database table?贪心算法总是最适合为数据库表选择适当的索引吗?
【发布时间】:2020-01-08 16:42:03
【问题描述】:

在 Garcia-Molina, Ullman, Widom 编写的“数据库系统:全书”中,在专门讨论索引的章节中,写到 为给定数据库选择最佳索引的贪心算法是有效的。贪心是指根据一些分析选择最佳索引,然后对剩余索引重复分析(包括上一步中新添加的索引的信息),再次选择最佳索引,等等。

根据作者的说法,我们必须牢记,使用一个或另一个索引也会影响其他索引的性能。

我只是好奇,“贪婪的方式”是唯一有效的还是可能也保证是最优的? 为什么它有效/最佳?

【问题讨论】:

  • 贪心方法通常不是最优的,在这种情况下也是如此。索引选择的最优解需要指数算法。
  • 感谢您的评论 - 我也可以接受它作为答案。

标签: database database-design database-indexes


【解决方案1】:

对于 MySQL,根本不使用“贪婪”方法(据我所知)。相反,它使用统计数据以及对 BTree 的探测来确定每个索引可能“花费”多少。那就买最便宜的。

在脑海中模拟“成本”模型是不切实际的;相反,请参阅以下内容,其中提供了一些几乎总是有效的一般规则: http://mysql.rjweb.org/doc.php/index_cookbook_mysql

没有方法“保证是最佳的”。许多方法(贪婪/成本/食谱/等)通常是最优的。

如果算法花费太多时间来决定什么是最优的,那么这会占用实际执行查询的时间!这有点像优化查询的“海森堡不确定性原理”。

有时“最佳”是忽略所有索引并简单地扫描表。这是因为在索引和数据之间来回跳动可能使使用索引变慢。这个论坛充斥着不理解这一点的人,他们问“为什么 MySQL 不使用我的索引?”

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2021-11-24
    • 2011-07-19
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多