MST

星途 面试题库

面试题:PostgreSQL中统计信息如何影响简单查询的执行计划

假设有一个简单的PostgreSQL查询,从一张有两列(id和name)的表中检索所有记录。请阐述PostgreSQL的统计信息(比如表的行数、列的基数等)是如何影响这个查询的执行计划的。
18.8万 热度难度
数据库PostgreSQL

知识考点

AI 面试

面试题答案

一键面试
  1. 表的行数
    • 全表扫描与索引扫描决策:如果PostgreSQL统计信息表明表的行数较少,数据库优化器可能会选择全表扫描。因为相比使用索引(索引查找可能有额外的开销,如索引结构的遍历),直接遍历少量的行数据可能更高效。例如,当表只有几十行数据时,全表扫描可以快速获取所有数据。
    • 计划成本估算:行数是计算查询执行计划成本的重要因素之一。优化器会根据行数估算全表扫描的成本。如果全表扫描成本低于其他可能的执行路径(如使用索引后再回表等操作的成本),则会选择全表扫描。
  2. 列的基数
    • 索引使用决策:基数(列中不同值的数量)影响索引的使用。如果id列基数高(即不同的id值很多),并且存在id列的索引,优化器可能会考虑使用索引来检索数据。因为高基数索引可以快速定位到特定的行,减少需要扫描的数据量。例如,如果id是唯一标识每行记录的主键,索引可以快速定位到具体的行。
    • 连接操作(若有):如果查询涉及多表连接,连接列的基数会影响连接算法的选择。例如,在嵌套循环连接中,基数小的表通常作为外表,这样可以减少内层循环的次数,提高连接效率。如果连接列基数大,可能会考虑其他连接算法,如哈希连接等,以更高效地处理大量数据的匹配。