[阿弟] 分享 plpgsql 中各种使用方法性能测试对比

以下是 Chinese bbs 阿弟哥总结的 plpgsql 的性能相关的帖子,非常有用,供日后参考:

  1. 直接函数调用跟select into付值性能差别
    采用直接函数调用性能是select into的n倍以上,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57522

  2. plpgsql中case与if的性能对比
    case的执行效率比if高出了10%有多,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57606

  3. plpgsql中采用exception,分步检查数据重复,合并执行性能测试
    合并执行的综合性能是最佳的,实际生产环境中应该是重复机率不会很高的,整体来说提高个20%左右,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57607

  4. plpgsql函数提取数据付值不同方式的性能差别
    直接在sql中付值明显的高出10%以上的性能,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57608

  5. plpgsql中采用perform 和 select执行函数或句子时的性能差别
    如果执行结果是不需要返回值时则采用perform的性能会更好,大约有3%提升,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57609

  6. 分享pg中数据类型的转换对性能的影响
    类型的转换对于性能的影响大约是15%左右的性能开销,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57610

  7. 在plpgsql中使用cursor和直接select的性能差别
    我们可以看到同样的work_mem,采用cursor的话,order by 需要 temp read=32474 written=32472,而用select直接提取数据的话,temp read=16237 written=16236,少了一半,
    所以性能提高明显,如果提高work_mem后,性能比较接近了一些,但还是select 直接提取数据来得好,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57611

  8. plpgsql中返回与不返回数据的性能差别
    在自定义函数里,如果不需要返回值的话,则直接return void能获得30%性能提升
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57612

  9. plpgsql自定义函数常用返回数据类型测试
    从测试的结果来看,数字形是integer跟boolean是一个筹级的,numeric次之,smallint,bigint比较差,float是最差的。字符类型相差不大,跟smallint,bigint差不多 ,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57613

  10. 分享plpgsql返回明确和不明确的数据类型时性能差别
    返回数据里要明确的告诉pg的解释器,否则性能将会降低30%,具体见
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57614

  11. plpgsql中CURRENT OF cur更新方式性能测试
    CURRENT OF cur的性能只有明确的指定条件的1/4,方便使用了,但要付出性能的代价
    http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=57615

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

购买链接:https://item.jd.com/12405774.html

PostgreSQL实战
感谢支持!
0%