PostgreSQL
文章平均质量分 85
此心光明-超然
这个作者很懒,什么都没留下…
展开
-
PostgreSQL JIT编译
@[TOC](PostgreSQL Just-in-Time Compilation(JIT))什么是just-in-time,在PostgreSQL里怎么配置。What is JIT compilation?Just-in-Time (JIT)编译是在运行时把解释型程序转换成原生程序的过程。例如,不使用可以评估任意SQL的通用代码来评估特定的谓词(比如WHERE a.col),而是生成一个...翻译 2018-10-29 09:59:43 · 1464 阅读 · 0 评论 -
PostgreSQL 10 - 分组集合和排序集合
PostgreSQL 10 - 分组集合和排序集合grouping sets先加载例子数据使用分组集合性能组合grouping sets和FILTER使用ordered sets理解假设聚合grouping sets很多人都熟悉GROUP BY和HAVING。但是,你熟悉CUBE、ROLLUP和GROUPING SETS吗?先加载例子数据我们使用BP能源报告的数据。数据结构是CREAT...原创 2018-12-26 09:59:22 · 4617 阅读 · 0 评论 -
PostgreSQL 10 索引 - 通过模糊搜索获得更好的答案
PostgreSQL 10 索引 - 通过模糊搜索获得更好的答案pg_trgm加速LIKE查询处理正则表达式pg_trgm想在PostgreSQL中使用模糊搜索,应该增加pg_trgm扩展:postgres=# CREATE EXTENSION pg_trgm;CREATE EXTENSIONpg_trgm扩展是很强大,为了展示能力,我准备了479785条北京的地点数据,数据保存在:...原创 2018-12-25 14:19:27 · 668 阅读 · 0 评论 -
PostgreSQL 10 索引 - 理解索引类型
PostgreSQL 10 索引 - 理解索引类型Hash索引GiST索引GiST是如何工作的GiST的扩展GIN扩展GINSP-GiSTBRIN扩展BRIN索引添加其他索引很多时候,b-tree就足够了,它是基于排序的,可以处理<、<=、=、>=和>。但是,比如在处理矩形的时候,应该怎么排序呢,根据面积,还是周长?所以,需要更多的索引类型。PostgreSQL 10....翻译 2018-12-25 10:08:52 · 3132 阅读 · 0 评论 -
PostgreSQL 10 - 事务日志
PostgreSQL 10 - 事务日志查看事务日志checkpoints优化事务日志PostgreSQL提供了系统crash的时候,不破坏数据的完整性的功能。vi如在断电以后,系统也能重新启动继续完成工作。这类安全保证由WAL(Write Ahead Log)提供-数据不直接写到数据文件,而是首先写到日志。比如这样一条语句:INSERT INTO data ... VALUES ('12...原创 2018-12-29 13:33:49 · 1280 阅读 · 0 评论 -
PostgreSQL 10 索引 - 自定义运算符
PostgreSQL 10 索引 - 自定义运算符增加新的运算符增加运算符类别测试自定义运算符类别到目前为止,我们的目标是找出要索引的列,然后盲目地建索引。我们假设数据以某种固定的常数做排序。事实上,这可能不正确。确实,数字总能有相同的顺序,但是其他类型的数据并不总能有预定义的固定的排序顺序。比如下面两条记录1118 09 08 782345 01 05 77这两行的顺序可能是什么?他...翻译 2018-12-24 09:28:00 · 1161 阅读 · 1 评论 -
PostgreSQL 10 - 数据分区
PostgreSQL 10 - 数据分区增加分区使用表约束修改继承结构把表移入或者移出分区结构清除数据理解PostgreSQL 10.0的分区一个块的默认大小是8KB,所以,PostgreSQL的一张表可以保存最多32TB的数据。但是,大表太不方便了,应该使用分区表。从PostgreSQL 10.0开始,用户可以更方便地处理数据分区了。增加分区我们先看看旧的分区办法。在研究分区的优点之前...原创 2018-12-29 09:31:19 · 808 阅读 · 0 评论 -
PostgreSQL 10 - 查询优化2
PostgreSQL 10 - 查询优化2连接处理外连接join_collapse_limit优化器设置遗传查询优化调整参数加速排序加速管理任务连接我们先建表,准备些数据:postgres=# CREATE TABLE a (aid int);CREATE TABLEpostgres=# CREATE TABLE b (bid int);CREATE TABLEpostgres=# ...原创 2018-12-28 10:39:07 · 2517 阅读 · 0 评论 -
PostgreSQL 10 - 查询优化 1
PostgreSQL 10 - 查询优化查询优化器评估join选项Nested loopsHash joinsMerge joins转换内联视图消除子查询等式约束详尽的搜索试一试使过程失败常量折叠函数内联连接修剪加速集合操作理解执行计划让EXPLAIN更冗长发现问题检查估计检查buffer的使用查询优化器假设,我们有三张表,一个视图,每张表都有索引:CREATE TABLE a (aid i...原创 2018-12-27 14:04:19 · 917 阅读 · 0 评论 -
PostgreSQL 10 - 理解其他b-tree功能
PostgreSQL 10 - 理解其他b-tree功能组合索引函数索引减少空间消耗建索引的时候添加数据组合索引一般来说,如果单一索引可以解决问题,就是最好的选择。你不可能把人们所有可能过滤的列都建索引。你只能使用组合索引,尽可能地提高性能。比如有这样一张表:postal_code、first_name和last_name。电话薄会使用这样的组合索引。你会看到数据根据位置排序。位置相同,再根...原创 2018-12-21 14:56:44 · 287 阅读 · 0 评论 -
PostgreSQL 10 - 使用clustered tables提升速度
PostgreSQL 10 - 使用clustered tables提升速度Clustering tables只使用索引扫描clustered table是什么意思呢?加入你想读整片数据,比如有一定的时间范围、一些块或者ID等等。这些查询依赖于数据的量和在磁盘上的范围。所以,假如你运行的查询返回相同数量的记录,如果磁盘布局不同,返回时间也就不同。比如下面的例子postgres=# EXPL...原创 2018-12-21 10:56:24 · 816 阅读 · 0 评论 -
PostgreSQL 10 - 自定义聚合函数
PostgreSQL 10 - 自定义聚合函数比如,想解决一个很简单的问题:比如客户打车要付钱,假如3公里内13元,以后每公里需要付2.30元。那一共付多少钱呢?当然,不用自定义聚合也能解决。不过,看看我怎么做。首先,增加测试数据:postgres=# CREATE TABLE t_taxi (c_id int, km numeric);CREATE TABLEpostgres=# IN...原创 2018-12-26 15:17:35 · 2141 阅读 · 1 评论 -
PostgreSQL 10 索引 - 理解简单的查询和成本模型
PostgreSQL 10 索引 - 理解简单的查询和成本模型使用EXPLAIN深入PostgreSQL成本模型部署简单的索引输出使用排序同时使用多个索引高效地使用位图扫描智能地使用索引我们先建表,插入数据:postgres=# CREATE TABLE t_test (id serial, name text);CREATE TABLEpostgres=# INSERT INTO t_t...原创 2018-12-20 17:13:33 · 692 阅读 · 0 评论 -
PostgreSQL 10 - 理解事务和锁
PostgreSQL 10 - 理解事务和锁使用PostgreSQL事务处理事务内部的错误使用SAVEPOINTTransactional DDLs理解基本锁避免典型错误和明确地锁考虑替代方案使用FOR SHARE和FOR UPDATE理解事务隔离级别考虑SSI事务死锁和类似的问题应用advisory locks优化存储和管理清除配置VACUUM和autovacuum深入事务的wraparound...原创 2018-12-20 11:09:52 · 2221 阅读 · 0 评论 -
PostgreSQL 10 - 窗口函数
PostgreSQL 10 - 窗口函数分区数据窗口内排序滑动窗口抽象窗口使用onboard窗口函数rank和dense_rankntilelead和lagfirst_value、nth_value和last_valuerow_number聚合遵循一个简单的原理:接受很多行,转换成较少的行。窗口函数不一样,它比较当前行和同组内的其他行。返回的行的数量不变。先看一个例子:postgres=# ...原创 2018-12-26 11:19:05 · 929 阅读 · 0 评论