1、PostgreSQL中文社区第13届PostgreSQL中国技术大会聚焦云端创新汇聚智慧共享赵振平/太阳塔科技PostgreSQL量化调优PostgreSQL中文社区个人微信PostgreSQL中文社区赵振平简介太阳塔科技CTO/国产数据库解决方案提供商个人微信PostgreSQL中文社区赵振平简介:PostgreSQL中文社区赵振平简介:PostgreSQL中文社区赵振平简介:PostgreSQL中文社区赵振平简介:PostgreSQL中文社区目录contents1.基础准备2.执行计划操作3.总成本计算4.ANALYZE分析的本质5.计算列的宽度/表总行数6.顺序扫描的成本计算公式7.计算
2、因子8.排序的计算公式9.实际执行(ANALYZE)10.排序优化PostgreSQL中文社区基础准备基础准备个人微信基础准备个人微信PostgreSQL中文社区执行计划操作执行计划操作Seq ScanSeq Scan(顺序扫描)是一种执行计划操作,它扫描表中的每一行来检查是否符合查询条件。Seq Scan通常在表没有适当的索引或索引选择性很低的情况下使用,因为它可以访问表中的所有行。Index ScanIndex Scan(索引扫描)是一种执行计划操作,它使用索引查找符合查询条件的行。Index Scan通常比Seq Scan更快,因为它只需要扫描索引中的一部分数据。Bitmap Heap
3、ScanBitmap Heap Scan(位图堆扫描)是一种执行计划操作,它使用位图来标记表中符合查询条件的行。该操作首先扫描索引并标记符合条件的行,然后将位图传递给堆扫描器以访问表中的行。Bitmap Heap Scan通常在查询需要多个索引或需要执行OR运算符时使用。个人微信执行计划操作Nested LoopNested Loop(嵌套循环)是一种执行计划操作,它对两个表进行嵌套循环,对每个行组合进行计算。例如,如果查询需要连接两个表,则Nested Loop将扫描第一个表中的每一行,并使用索引扫描第二个表来查找符合条件的行。Hash JoinHash Join(哈希连接)是一种执行计划操
4、作,它将两个表连接在一起,并使用哈希算法进行连接操作。Hash Join通常比Nested Loop更快,因为它可以在内存中进行连接操作,而不需要在磁盘上进行循环连接。SortSort(排序)是一种执行计划操作,它对结果集进行排序。排序通常需要使用磁盘来存储和排序结果集,因此它是查询中的一个成本较高的操作。AggregateAggregate(聚合)是一种执行计划操作,它对结果集进行聚合操作。例如,计算总和、平均值、最小值和最大值等操作。个人微信PostgreSQL中文社区总成本计算连接操作的成本总成本计算是查询计划执行前需要完成的所有操作的成本,包括构建索引结构、创建临时表等。启动成本(准备
5、阶段)是查询计划中实际执行查询所需的所有操作的成本,包括筛选、排序、聚合等操作。执行成本(运算阶段)总成本(total cost):启动成本(startup cost)+执行成本(execution cost)总成本个人微信PostgreSQL中文社区ANALYZE分析的本质ANALYZE的本质default_statistics_targettpmC 只有默认配置下的22.2%个人微信ANALYZE的本质触发analyze的3种方式ANALYZE table_name;autovacuumautovacuum_analyze_threshold:定义了表的分析阈值,默认是 50 条记录。au
6、tovacuum_analyze_scale_factor:定义了表的分析比例因子,默认是 0.1(即 10%的变化)。VACUUM ANALYZE table_name;Vacuum full个人微信PostgreSQL中文社区计算列的宽度/表总行数计算列的宽度/表总行数个人微信PostgreSQL中文社区顺序扫描的成本计算公式顺序扫描的成本计算公式个人微信顺序扫描的成本计算公式个人微信顺序扫描的成本计算公式顺序扫描的成本计算公式这些值我们要手动调整吗?个人微信Postgr