小编Léo*_* 준영的帖子

在 MySQL 5.5 中拥有类似 PostgreSQL 的部分索引

我有大数据,我一次只选择一小段数据,这样选择总是按顺序排列的。我正在尝试在 MySQL 中实现像 Partial index 这样的 PostgreSQL,这是针对此类目的。我不确定部分唯一约束是否与我想要的相同。

PostgreSQL 9.4 中的代码

CREATE UNIQUE INDEX dir_events
    ON events (measurement_id)
    USING btree
    (eventBody)
    WHERE is_active;
Run Code Online (Sandbox Code Playgroud)

尝试在 MySQL 中对 ypercube 的部分索引

CREATE UNIQUE INDEX dir_events
    [index_type] -- TODO what here?
    ON events (measurement_id, is_active)
    [index_type] -- TODO what here?
Run Code Online (Sandbox Code Playgroud)

如何在 MySQL 5.5 或类似版本中创建类似 PostgreSQL 的部分索引?

mysql index

10
推荐指数
1
解决办法
9402
查看次数

如何在 Postgresql 中转换为 int 数组?

我想从 ARGV[] 转换到 PostgreSQL 中的 int 数组,我在代码中用TODO标记了伪代码。x86_64-unknown-linux-gnu 上 PostgreSQL 9.4.3 中的代码,由 gcc (Debian 4.9.2-10) 4.9.2 编译,64 位:

CREATE TABLE measurements (
        measurement_id SERIAL PRIMARY KEY NOT NULL,
        measurement_size_in_bytes INTEGER NOT NULL
);

CREATE TABLE events (
        event_id SERIAL PRIMARY KEY NOT NULL, 
        measurement_id INTEGER NOT NULL, 
        event_index_start INTEGER NOT NULL,
        event_index_end INTEGER NOT NULL
);

CREATE OR REPLACE FUNCTION insaft_function() 
    RETURNS TRIGGER AS 
$func$
BEGIN 
  -- TODO Loop until TG_ARGV[0] empty
INSERT INTO events (measurement_id, event_index_start, event_index_end) 
SELECT …
Run Code Online (Sandbox Code Playgroud)

postgresql insert plpgsql cast array

9
推荐指数
1
解决办法
6万
查看次数

如何高效统计PostgreSQL的部分索引?

这个答案促使我再次思考我的下表,但我仍然不确定如何存储来自数据分析的变量/结果以便在后处理中快速选择。如果存储,我认为它使用部分索引(B 树)做得很好,因为在我这里描述的应用程序中只需要一个数据子集。假设您有三个标准正交表:measurementeventsheaders,其中都有一些静态(以字节为单位的事件大小等)列,但想知道从数据分析中存储一些数字是否有益。

没有名称的表模式测量示例:

SERIAL                     | NOT NULL
INTEGER                    | NOT NULL
INTEGER                    | NOT NULL
TIMESTAMP WITH TIME ZONE   | DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

由于我需要统计数据,我担心通过 INTEGER 字段增加架构大小。我不想将很少使用的变量存储在主表中。我不希望我的索引没有像PostgreSQL Up & Running和这篇文章中描述的那样被使用,为什么我的索引没有被索引?

可能的来源


什么时候应该将静态/动态统计信息存储在表中?PostgreSQL 的部分索引中如何高效地存储静态/动态统计信息?

postgresql performance statistics size index-tuning

8
推荐指数
0
解决办法
136
查看次数

在两个表中的触发器函数中选择

我在 x86_64-unknown-linux-gnu 上的 PostgreSQL 9.4.3 中的表和触发器,由 gcc (Debian 4.9.2-10) 4.9.2,64 位编译:

CREATE TABLE measurements (
        measurement_id SERIAL PRIMARY KEY NOT NULL,
        measurement_size_in_bytes INTEGER NOT NULL
    );    

CREATE TABLE file_headers (
        header_id SERIAL PRIMARY KEY NOT NULL, 
        measurement_id INTEGER NOT NULL, 
        file_header_index_start INTEGER,
        file_header_index_end INTEGER
    );

CREATE TRIGGER measurement_ids AFTER INSERT 
        ON measurements FOR EACH ROW 
        EXECUTE PROCEDURE ins_function('SELECT measurement_id FROM measurements 
        ORDER BY measurement_id desc limit 1;', 1, 666 ); 
Run Code Online (Sandbox Code Playgroud)

在那里我假设 SELECT 的数据类型自 SERIAL 以来是 INTEGER 但它显然是错误的,因为我从这个启动触发器的命令中收到错误消息:

INSERT INTO measurements …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger datatypes plpgsql serialization

6
推荐指数
1
解决办法
2万
查看次数

如何在 VALUES 和 SELECT 之间选择 INSERT?

这个答案向我提出了如何在这样的函数之间VALUESSELECT中进行选择的问题。在 x86_64-unknown-linux-gnu 上使用PostgreSQL 9.4.3,由 gcc (Debian 4.9.2-10) 4.9.2, 64-bit 编译

CREATE OR REPLACE FUNCTION insaft_function()
   RETURNS TRIGGER AS
$func$
BEGIN     
   INSERT INTO file_headers (measurement_id, file_header_index_start
                                           , file_header_index_end)
   VALUES (NEW.measurement_id, TG_ARGV[0]::int, TG_ARGV[1]::int);

   RETURN NULL;  -- result ignored since this is an AFTER trigger
END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

VALUES处理多行,但SELECT你可以做更多的事情。这里唯一的要求是对INSERT表格执行上述操作。您可以假设INSERT在系统的持续质量保证中每个周期完成100k 次这样的操作。

我注意到这些差异与我的数据不同,这里选择了三个中值:

VALUES
real      user      sys
-------------------------------
0m0.353s  0m0.256s  0m0.028s
0m0.327s  0m0.252s  0m0.036s
0m0.358s …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger performance select postgresql-performance

6
推荐指数
1
解决办法
1322
查看次数

尽量减少 PostgreSQL 中的缓存未命中?

您可以按照此处所述计算缓存未命中。
但是,我对如何最小化 PostgreSQL 9.4.3 在 x86_64-unknown-linux-gnu 上的现象很感兴趣,它由 gcc (Debian 4.9.2-10) 4.9.2, 64-bit 编译。我有一些基于哈希表的算法,它们通过随机访问导致很多缓存未命中。我对如何最大限度地减少 PostgreSQL 中的缓存未命中感兴趣。

如何通过设计最大限度地减少 PostgreSQL 中的缓存未命中?

postgresql performance cache configuration postgresql-9.4 postgresql-performance

5
推荐指数
1
解决办法
867
查看次数

关键与差距的挑战?

我有一个触发器错误,导致在 x86_64-unknown-linux-gnu 上的 PostgreSQL 9.4.3 中出现错误,由 gcc (Debian 4.9.2-10) 4.9.2, 64 位编译。每次出错期间,SERIAL 的主键都会增加。修复错误后,表格测量结果

 measurement_id | measurement_size_in_bytes |             time              
----------------+---------------------------+-------------------------------
              1 |                     77777 | 2015-07-14 18:29:56.858703+03
              2 |                       888 | 2015-07-14 18:29:56.882552+03
              3 |                       888 | 2015-07-14 18:30:15.505957+03
              4 |                       888 | 2015-07-14 18:41:01.878106+03
             39 |                     77777 | 2015-07-15 12:11:21.21391+03
             40 |                     77777 | 2015-07-15 12:11:59.551973+03
             41 |                     77777 | 2015-07-15 12:12:05.48982+03
             42 |                     77777 | 2015-07-15 12:13:02.402053+03
             43 |                     77777 | 2015-07-15 12:13:02.419412+03
             44 |                       888 | 2015-07-15 …
Run Code Online (Sandbox Code Playgroud)

postgresql serialization errors

4
推荐指数
1
解决办法
761
查看次数

Postgres 是如何制作 B 树索引的?

我想估计使用 B-tree 方法需要多少次读取 PostgreSQL 的部分索引,因为我无法直接更改块大小。PostgreSQL 手册关于这里的索引和这里关于块大小的信息,对于 aux 来说是 100,所以有 3 次读取。

块大小占用的默认内存为 8 KB,即通常为 1 个块,但我不确定这是否可行,因为它log_1(2)是无穷大。我的想法是动态计算的读取次数也可能在PostgreSQL的这里考虑的B树块尺寸决定读取次数。我想知道块大小log_b nb有多少:块大小在哪里n,事件数在哪里。我认为它在数学上不可能是一个。我认为 Postgres B-tree 是按照 Wiki 页面中描述的标准方式实现的,也由 Cormen 等人描述。

基于此答案,B 树索引仅包含 PostgreSQL 中的键。然后数据再次位于作为逻辑堆的表中。索引的重点是存储密钥。数据位于表中,表是基于here 的逻辑堆。我对 PostgresSQL 如何创建名为 B-tree 的实体感兴趣。基于此处,B 树索引和表的物理存储使用相同的数据页,并且页面布局几乎相同。但是,我对这个实体如何协同工作很感兴趣。索引和数据的功能大概可以这样描述:

B 树从根生长,而不是从叶子生长。

但更准确地说,来自 Sumathi 关于关系数据库管理系统的基础知识(计算智能研究)

在 B 树中,非叶节点比叶节点大。指向数据记录的指针存在于树的所有级别。

在 B+tree 中,指针只存在于叶子上。你如何评估 B 树的指针系统?您如何描述 PostgreSQL B 树占用的大 O 空间?Postgres 是如何制作 B 树索引的?

postgresql index database-internals

3
推荐指数
1
解决办法
2871
查看次数