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