PostgreSQL Partial Index


PostgreSQL Partial Index

在本节中,我们将了解PostgreSQL Partial Index的工作原理,它用于通过减小索引大小来增强命令的性能。

什么是 PostgreSQL Partial Index?

到现在为止,我们已经了解了如何将各个列的值添加到索引中。的局部索引是下一个命令,该命令在PostgreSQL的索引使用。

它允许我们定义可以被索引的表的行。因此,我们将使用Partial Index来加速查询,同时删除索引的大小。

换句话说,我们可以说PostgreSQL Partial Index是一个索引,它是在表的一个子部分上构造的。Partial Index的谓词是由条件表达式明确定义的子集。

并且仅针对满足谓词的那些表行访问索引。

假设我们使用了具有常量值的 WHERE 条件,那么在这种情况下,我们可以使用PostgreSQL Partial Index,因为它非常有用。

注意:如果列名包含constant_value,那么我们可以使用下图:

SELECT *   
FROM table_name  
WHERE column_name = constant_value;

PostgreSQL Partial Index的语法

指定Partial Index的语法如下:

CREATE INDEX index_name  
ON table_name(column_list)  
WHERE condition;

在上图中,[WHERE 子句用于定义添加到索引中的那些行。

PostgreQL Partial Index示例

让我们看一个示例示例来了解PostgreSQL Partial Index的工作原理

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

要将客户\创建到组织数据库中,我们使用CREATE命令:

CREATE TABLE Buyer (  
    Buyer_id int Primary key,  
    first_name character varying(35) NOT NULL,  
    last_name character varying(35) NOT NULL,  
    email_address character varying(50),  
   active integer  
);

输出

执行完上述命令后,我们会得到如下消息窗口,显示Buyer\表已经成功创建到Organization\表中。

PoatgreSQL Partial Index

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

INSERT INTO Buyer( Buyer_id, first_name, last_name, email_address, active)  
VALUES (1001,'Mike', 'Ross','mike.ross11@hotmail.com',1),  
(1002,'Olivia', 'Smith','O.smith@gmail.com',0),  
(1003,'Kathy', 'James','kathy.james@gmail.com',0),  
(1004,'Annie', 'Russell','annie33@gmail.com',0),  
(1005,'Rachel', 'Barnes','barnes.rachel55@gmail.com',1);

输出

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

PoatgreSQL Partial Index

通常,如果我们对不活跃的买家感兴趣并经常进行一些跟进以让他们重新购买更多商品。

在下面的命令中,我们试图识别所有不活跃的买家:

SELECT Buyer_id, first_name, last_name, email_address  
FROM Buyer  
WHERE active = 0;

输出

成功实施上述命令后,我们会得到下面的结果,它显示了所有买家的信息谁是不活动的

PoatgreSQL Partial Index

在下面的命令中,我们使用EXPLAIN 关键字来实现上述命令,因为查询计划器需要扫描买家\表:

EXPLAIN  
SELECT Buyer_id, first_name, last_name, email_address  
FROM Buyer  
WHERE active = 0;

输出

执行上述命令后,我们将得到以下输出,其中显示了买方表的查询计划

PoatgreSQL Partial Index

在这里,我们还可以通过为活动列创建索引来增强命令,如以下命令所示:

CREATE INDEX idex_buyer_active  
ON Buyer(active);

输出

执行上述命令会得到如下信息:index has idex_buyer_active was created successfully

PoatgreSQL Partial Index

上面创建的索引满足了它的目的,但它也包含几行,从不搜索,特别是所有活跃的买家。

在下面的命令中,我们指定了指数,其中仅包括不活跃的买家:

CREATE INDEX idex_buyer_inactive  
ON Buyer(active)  
WHERE active = 0;

输出

执行上述命令后,我们会得到如下信息:idex_buyer_inactive索引已经创建成功。

PoatgreSQL Partial Index

因此,当WHERE 子句出现在命令中时,PostgreSQL将使用Partial Index,如以下命令所示:

EXPLAIN  
SELECT Buyer_id, first_name, last_name, email_address  
FROM Buyer  
WHERE active = 0;

输出

我们将在执行上述命令时收到以下消息,其中显示了当 PostgreSQL 优化器使用idex_buyer_inactive索引时买家表的查询计划。

PoatgreSQL Partial Index

概述

PostgreSQL Partial Index部分,我们已经了解了 PostgreSQL Partial Index的工作以及如何定义添加到索引中的行。