有一种情况是,如果查询可以获取表的大部分(如50%),那么即使索引适用,优化器也不会选择索引,而优化程序将使用表扫描。 有人说对于SSD来说,上面的优化不再有意义,因为SSD的随机访问非常快(总是使用索引扫描不应该有任何问题)。
在上面吗?
我觉得即使随机访问速度很快, block 读取数据页面与第一次读取索引页面相比仍会更快,然后读取数据页面。
答案 0 :(得分:1)
它并没有使优化完全过时,但它确实改变了使用索引和顺序扫描更有效的平衡。当随机访问的成本较低时,对于返回表的更大部分的查询使用索引是有意义的,但仍然需要读取索引本身所花费的时间超过读取所节省的时间。 (略)表中的行数较少。
您的数据库可能提供一种配置优化程序的方法,以便更好地了解底层存储系统的性能特征。例如,PostgreSQL有settings for the estimated cost of various operations,查询计划程序使用它来估计每个可能的查询计划的总体成本。默认情况下,随机访问估计是顺序访问的4倍,但如果数据库位于SSD上,则可以将random_page_cost
的值减小到等于或等于seq_page_cost
。这将减少涉及大量随机访问的查询计划的估计成本,因此计划员将更频繁地选择它们。