PostgreSQL 查询计划是否取决于 table 行数?

Do PostgreSQL query plans depend on table row count?

我的用户 table 还没有很多行……。

同一个查询的查询计划是否会随着 table 的增长而改变?

也就是说,要查看我的应用程序将如何扩展,我是否应该在使用 EXPLAIN 之前为我的 users table 播种数十亿行?

估计的行数可能是影响选择哪个查询计划的最重要因素。

两个支持这一点的例子:

  • 如果在 table 的索引列上使用 WHERE 条件,可能会发生三种情况:

    1. 如果table非常小或者符合条件的行比例很高,将使用顺序扫描读取整个table并过滤掉符合条件的行。

    2. 如果 table 很大并且符合条件的行的百分比很低,将使用索引扫描。

    3. 如果table很大并且中等百分比的行匹配条件,将使用位图索引扫描。

  • 如果连接两个 table,table 上的估计行数将决定是否选择嵌套循环连接。