📜  PostgreSQL – 创建索引

📅  最后修改于: 2022-05-13 01:57:15.509000             🧑  作者: Mango

PostgreSQL – 创建索引

为了更好地理解 PostgreSQL 中索引背后的概念,假设您需要在电话簿上查找 Raju Kumar 的电话号码。了解电话簿上的姓名按字母顺序排列后,您首先查找姓氏为 Kumar 的页面,然后查找名字 Raju,最后得到他的电话号码。

假设电话簿上的姓名不是按字母顺序排列的,您必须翻阅所有页面,检查每个姓名,直到找到 Raju Kumar 的电话号码。这称为顺序扫描,您可以遍历所有条目,直到找到您要查找的条目。

与电话簿类似,表中存储的数据应按特定顺序组织,以加快各种搜索速度。这就是索引发挥作用的原因。

PostgreSQL 中 CREATE INDEX语句用于为表定义新索引。

Syntax:
CREATE INDEX index_name ON table_name [USING method]
(
    column_name [ASC | DESC] [NULLS {FIRST | LAST }],
    ...
);

我们来分析一下上面的语法:



  • 首先,在 CREATE INDEX子句之后指定索引名称。索引名称应该有意义且易于记忆。
  • 其次,指定索引所属的表的名称。
  • 第三,指定索引方法,例如二叉树 hash gist spgist ginbrin 。 PostgreSQL默认使用二叉树。
  • 第四,列出一个或多个要存储在索引中的列。
  • ASCDESC指定排序顺序。 ASC 是默认设置。
  • NULLS FIRSTNULLS LAST 指定在 non-null之前或之后的空值排序。该NULLS FIRST是默认指定DESCNULLS LAST是默认未指定DESC

出于演示目的我们将使用示例数据库中的地址进行演示。

例子:

以下查询查找电话号码为223664661973的地址:

SELECT * FROM address
WHERE phone = '223664661973';

很明显,数据库引擎必须扫描整个地址表来查找地址,因为电话列没有可用的索引。

要显示查询计划,请使用 EXPLAIN 语句,如下所示:

EXPLAIN SELECT *
FROM address
WHERE phone = '223664661973';

这将导致以下结果:

要为地址表的电话列中的值创建索引,请使用以下语句:

CREATE INDEX idx_address_phone 
ON address(phone);

现在,如果再次执行查询,您会发现数据库引擎使用索引进行查找:

EXPLAIN SELECT *
FROM address
WHERE phone = '223664661973';

输出: