【问题标题】:Can SQL index make search longer?SQL索引可以使搜索更长吗?
【发布时间】:2021-11-13 18:11:01
【问题描述】:

我在一次求职面试中听到了这个问题,面试官说是的。我的问题是为什么以及有人可以举一个索引的例子,使搜索更长而不是更短。

【问题讨论】:

  • 这是一个没有上下文的问题,所以基本上无法回答。
  • 长于...比什么?

标签: sql database postgresql indexing


【解决方案1】:

一个简单的例子是在一个只有很少行的表上。

索引搜索必须将索引加载到内存中,然后查找原始数据。如果一个表只有几行,它们可能适合一个数据页。因此,全表扫描需要加载一页。

任何索引搜索(在冷缓存上)都需要加载两个数据页——一个用于索引,一个用于数据。这可能(显着)长于扫描单个页面上的行。

在大表上,如果“搜索”返回表中很大比例的行,那么索引搜索最终会以不同于存储方式的顺序获取行。如果数据页没有在内存中修复,那么您就会遇到一种称为 thrashing 的情况,这意味着每个新行很有可能是缓存未命中。

【讨论】:

    【解决方案2】:

    是的,它可以

    如果适用,附加索引会为查询添加可能的执行计划。 Postgres 查询计划器估计各种可能的计划的成本,并且最快的估计获胜。由于这些是估计,实际的查询计划总是会出现偏差。使用新索引的选定查询计划可能会比没有使用新索引的计划慢。
    如果您的服务器配置正确(成本和资源设置、当前列统计信息等),这种结果不太可能发生,但仍然可能。几乎每个查询都可能发生这种情况。更有可能用于更复杂的查询。众所周知,某些类型的查询很难估计。

    相关:

    此外,索引总是会增加写入成本,因此如果您的数据库写入繁重且机器已经饱和,更多的索引可能会降低整体性能。

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 1970-01-01
      • 2016-08-06
      • 2012-01-25
      • 2021-12-24
      • 2018-09-02
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      相关资源
      最近更新 更多