MST

星途 面试题库

面试题:PostgreSQL中COST基准值参数对查询性能的影响

请阐述PostgreSQL中主要的COST基准值参数(如seq_page_cost、random_page_cost等)的含义,并说明它们如何影响查询优化器选择执行计划。
41.7万 热度难度
数据库PostgreSQL

知识考点

AI 面试

面试题答案

一键面试

seq_page_cost

  • 含义:顺序扫描时读取一个页面的成本。顺序扫描是指按物理顺序依次读取表中的页面。通常顺序读取比随机读取要快,所以这个值一般相对较小。
  • 对查询优化器影响:当查询优化器评估是否使用顺序扫描时,会考虑这个成本值。如果顺序扫描整个表所需的成本(表的页面数乘以seq_page_cost)比其他可能的访问路径成本低,优化器可能会选择顺序扫描。

random_page_cost

  • 含义:随机读取一个页面的成本。随机读取意味着不是按顺序依次读取,比如通过索引查找定位到不在连续物理位置的页面。由于磁盘I/O特性,随机读取通常比顺序读取慢很多,所以这个值一般比seq_page_cost大。
  • 对查询优化器影响:在评估使用索引扫描等可能涉及随机读取的访问路径时,优化器会考虑这个成本。如果使用索引带来的随机读取成本过高,即使索引存在,优化器可能也不会选择使用该索引,而是选择其他成本更低的执行计划,如顺序扫描。

cpu_tuple_cost

  • 含义:处理(例如扫描、排序等操作)一条元组(行)所需的CPU成本。它反映了在CPU上处理数据行的开销。
  • 对查询优化器影响:当查询涉及到对表数据的处理操作,如排序、过滤等,优化器会根据操作涉及的元组数量乘以cpu_tuple_cost来计算CPU处理成本。如果某条执行计划在CPU处理成本上过高,优化器可能会选择其他计划。

cpu_index_tuple_cost

  • 含义:处理索引中一条记录(元组)所需的CPU成本。它主要用于评估在使用索引进行查询时,对索引记录的处理开销。
  • 对查询优化器影响:在评估使用索引扫描的执行计划时,优化器会考虑这个成本。如果使用索引扫描,索引记录的处理成本(索引记录数乘以cpu_index_tuple_cost)过高,优化器可能会重新评估是否选择该索引扫描计划。

cpu_operator_cost

  • 含义:执行一个操作符(例如比较操作符、算术操作符等)所需的CPU成本。
  • 对查询优化器影响:当查询中包含各种操作符运算时,优化器会根据操作符的使用次数乘以cpu_operator_cost来计算这部分的CPU成本。这会影响到优化器对包含不同操作符运算的执行计划的选择。