在Garcia-Molina,Ullman,Widom撰写的“数据库系统:完整的书”中,在专门讨论索引的章节中,--为给定数据库选择最佳索引的贪婪算法是有效的。贪婪指的是在一定分析的基础上选择最优的指标,然后对剩余的指标进行重复分析(包括前一步新增指标的信息),再选择最优的指标等。
作者认为,我们必须记住,使用一个或另一个索引也会影响其他索引的性能。
我只是好奇,“贪婪的方式”是唯一有效的,还是也保证是最优的?为什么它是有效的/最佳的?
发布于 2020-01-13 00:50:15
对于MySQL,根本不使用“贪婪”方法(据我所知)。相反,它使用统计数据,加上对BTrees的探测,以确定每个索引的“成本”。那么最便宜的。
在头脑中模拟“成本”模型是不切实际的;相反,请参阅以下内容,其中提供了一些几乎总是有效的通用规则:http://mysql.rjweb.org/doc.php/index_cookbook_mysql
没有一种方法是“保证最优的”。许多方法(贪婪/成本/食谱/等等)通常是最优的。
如果一个算法花费太多的时间来决定什么是最优的,那么这就占用了实际执行查询的时间!这是一种优化查询的“海森堡不确定性原理”。
有时,“最优”是忽略所有索引,只需扫描表。这是因为在索引和数据之间来回跳可能会使使用索引的速度变慢。这个论坛上到处都是不明白这一点的人,他们问:“为什么MySQL不使用我的索引?”
https://stackoverflow.com/questions/59650299
复制相似问题