PostgreSQL 一复合查询SQL优化例子 - (多个exists , 范围检索 , IN检索 , 模糊检索 组合)
背景 当一个SQL包含复杂的多个exists , 范围检索 , IN检索 , 模糊检索 , 组合查询时,可能由于索引使用不当导致查询性能较慢。 主要的问题在于,索引使用不当,可能导致几个问题: 1、索引本身扫描的耗时过多 2、位图扫描引入的recheck过多 3、subplan 引入的 filter过多 ...
背景 当一个SQL包含复杂的多个exists , 范围检索 , IN检索 , 模糊检索 , 组合查询时,可能由于索引使用不当导致查询性能较慢。 主要的问题在于,索引使用不当,可能导致几个问题: 1、索引本身扫描的耗时过多 2、位图扫描引入的recheck过多 3、subplan 引入的 filter过多 ...
背景 假设一个黑盒中有三种水果:苹果,香蕉、菠萝。一共有若干个水果。 假设你需要拿10个苹果,你需要拿多少次呢? 最差的情况,你可能需要把所有的水果都拿完。(全表扫描,扫到最后才拿到10个或者不足10个) 最好的情况,你可能10次就拿完。(全表扫描,扫10行全都是苹果。) PS:索引扫描这里就不说了,因为...
背景 《阿里云 PostgreSQL 产品生态;案例、开发实践、管理实践、学习资料、学习视频 - 珍藏级》 以上有个CASE是讲:如何找出在同一辆车内的人,实际上就是通过车辆、人物的轨迹点数据,进行多轮的求交集,将结果收敛到一个较小的范围。 Greenplum伴随分析测试 1、创建测试表 create t...
背景 假设我们有一些物体的轨迹数据(经纬度、measure(通常存为epoch时间戳)),比如车辆、人、传感器等。 给定一个物体在某个时间范围的轨迹数据,查找有没有与这个物体接触的轨迹,并按亲密度排序。 http://postgis.net/docs/manual-2.4/geometry_distance_...
背景 《Greenplum & PostgreSQL UPSERT udf 实现 - 1 单行模式》 批量模式,接口函数的输入参数如下 1、schemaname 2、表名 3、分布键名(数组) 4、每一次请求的内容,JSON或JSONB 数组。(每次请求的字段可能各不相同,所以务必每个JSON或...
背景 PostgreSQL GiST索引支持排序接口,可以支撑空间、标准、数组、文本向量、文本等类型的排序。 分别表示: 1、给定一空间位置,按空间距离排序输出 2、给定一数组、全文检索值、字符串,按数组、全文检索、字符串相似度排序输出 3、给定一标准类型的值,按标准类型的距离排序 数据库目前支持哪些排...
背景 PostgreSQL 9.5 开始支持了upsert的语法, PostgreSQL 9.5 以前的版本,可以使用CTE语法来代替insert into on conflict(upsert),实现UPSERT。或者使用UDF来实现。 [《HTAP数据库 PostgreSQL...
背景 HeteroDB pg_strom是PG的一个GPU加速插件,目前已支持到PG 11的版本。 在这些场景中可以加速查询,非常适合计算型场景(OLAP场景) 1、FILTER 2、聚合 3、JOIN 4、GROUP BY 同时PG_strom还引入了一些高级特性: 1、结合PG CPU并行计算,...
背景 以下内容出自互联网: https://blog.csdn.net/zhenwenxian/article/details/6196943 cpufreq是一个动态调整cpu频率的模块,系统启动时生成一个文件夹/sys/devices/system/cpu/cpu0/cpufreq/,里面有几个文件, ...
背景 PostgreSQL在启动时,如果处于恢复状态,可能不会立即启动wal receiver去问上游主库要WAL日志。 原因是什么呢? standby获取WAL的流程 《PostgreSQL 物理恢复时查找wal record的顺序 - loop(pg_wal, restore_command, stre...