PostgreSQL 多列索引

在本节中,我们将了解PostgreSQL 多列索引的创建,这些索引是在表的多个列上指定的。

什么是 PostgreSQL 多列索引?

我们可以在表的不同列上创建索引;此类索引称为多列索引。

换句话说,我们可以说多列索引就是那些用一张表的几列创建的索引。

多列索引也称为复合索引、连接索引和组合索引。

一个表最多可以有32 列。并且可以通过在构建PostgreSQL时修改pg_config_manual.h来更改限制。

此外,多列索引只支持B-tree、GIST、GIN 和 BRIN类型的索引。

PostgreSQL 多列索引的语法

PostgreSQL 多列索引的语法如下:

CREATE INDEX index_name    
ON table_name (p, q,r,….);  

如果我们要指定一个多列索引,我们应该将WHERE子句中经常使用的列放在列列表的开头,将重复使用的列放在后面的条件中。

在上图中,我们有以下PostgreSQL 优化器将考虑使用索引的场景:

WHERE p = value1 and q = value2 and r = value3;  

或者

WHERE p = value1 and q = value2;  

或者

WHERE p = value1; 

但是,在以下情况下,我们不会使用索引:

WHERE r = value3; 

或者

WHERE q = value2 and r = value3;  

PostgreSQL 多列索引示例

要了解PostgreSQL 多列索引的工作原理,我们将看到以下示例。

因此,我们正在使用CREATE命令的帮助创建一个新表作为Person并使用INSERT命令插入一些值。

要将Person表创建到Organization 数据库中,我们使用CREATE命令。

Person表包含各种列,例如Person_id、First_name、Last_name列,其中我们使用Person_id作为GENERATED ALWAYS AS IDENTITY 约束。

CREATE TABLE Person(  
    Person_id INT GENERATED BY DEFAULT AS IDENTITY,  
    first_name VARCHAR(30) NOT NULL,  
    last_name VARCHAR(30) NOT NULL  
);  

执行上述命令后,我们会得到如下信息,显示Person表已成功创建到Organization数据库中。

成功创建Person表后,我们将在INSERT命令的帮助下向其中输入一些值。

INSERT INTO Person (First_name, Last_name)  
VALUES ('Mike', 'Ross'),  
('John','Smith),  
('Owen','Norman'),  
('Bruce','Willis'),  
('Douglas','Smith'),  
('Olivia', 'Smith');  

执行上述命令后,我们将得到以下消息窗口,显示指定的值已成功插入到Person表中。

在Person表中创建并插入值后,我们将识别姓氏为Smith的人,如以下命令所示:

SELECT *  
FROM Person  
WHERE last_name = 'Smith';  

执行上述命令后,我们将得到以下输出,其中显示了姓氏属于Smith的所有人员。

在下面的命令中,我们将使用EXPLAIN命令对Person表执行顺序扫描,这有助于我们识别等效行,因为没有为last_name列定义索引。

EXPLAIN  
SELECT *  
FROM Person  
WHERE last_name = 'Smith';  

成功执行上述命令后,我们会得到如下结果,显示PostgreSQL完成了对Person表的顺序扫描。

目前,多列索引只支持B-tree、GiST、GIN 和 BRIN索引类型。

热门文章

优秀文章