PostgreSQL Create Index


PostgreSQL Create Index

在本节中,我们要了解的工作的PostgreSQLCreate Index实例中的Create Index命令

为什么我们使用 PostgreSQL Create Index命令?

PostgreSQL 中Create Index命令用于通过定义索引名称和Create Index的表或列名称来创建新索引。

PostgreSQL Create Index命令的语法

Create Index命令的语法如下:

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

在上面的语法中,我们使用了以下参数,如下表所示:

参数 描述
Index_name 它用于定义索引名称。它应该写在CREATE INDEX 之后在这里,我们应该尽量给索引起一个通俗易懂、有意义的名字,这样容易让人想起。
Table_name 表名参数用于定义表名称,该名称与该索引相关。并且在ON关键字之后指定。
Using[method] 用于指定索引方法,如B-tree、GIN、HASH、GiST、BRIN、SP-GiST。默认情况下,PostgreSQL 使用B-tree 索引
Column_name 列名参数使用,如果我们有存储在索引数列定义列表。在ASC和DESC用于定义排序顺序。默认情况下,它是ASC。该NULLS FIRST或NULLS LAST来形容排序之前或之后的非空值。DESC定义,那么NULLS FIRST被视为默认。当DESC没有定义,那么NULLS LAST被视为默认。

注意:如果我们想确定一个命令是否使用索引,我们可以使用 EXPLAIN 命令。

PostgreSQL Create Index示例

让我们看一个示例来了解PostgreSQL CREATE Indexes命令的工作。

但在讨论该示例之前,我们将把索引和电话簿类比作为示例的一部分。

索引和电话目录类比

为了理解索引和电话簿类比的实例,我们有以下案例:

案例 1:如果电话簿按字母顺序排列。

  • 假设我们需要看到的电话号码麦克·泰勒电话目录
  • 我们也知道电话簿中的名字是按字母顺序排列的。
  • 因此,我们首先会检查姓氏Taylor 的页面,确定名字Mike 的页面,最后检索他的电话号码

情况 2:如果电话簿不是按字母顺序排列的。

  • 假设电话簿上的姓名不是按字母顺序排列的。
  • 因此,我们应该检查所有页面,例如检查所有姓名,直到我们确定迈克泰勒的电话号码。
  • 这个过程被称为顺序扫描,它将遍历所有条目,直到我们确定我们正在搜索的条目。

笔记:

电话簿并行存储在表中的数据可以按特定顺序准备以加速多次搜索;因此,我们使用了索引。

可以将索引视为一种数据结构,例如B-Tree,它以进一步写入和存储以保持表为代价来提高对表的数据检索率。

我们正在使用Person_detalis\表,我们在 PostgreSQL 教程的前面部分创建了它。

Person_deatils\表包含各列如ID,PERSON_NAME和MOBILE_NUMBER,如图中下面的截图:

PostgreSQL Create Index

在下面的命令中,我们将尝试识别Mobile_number 为 (444)-333-1234的 Person 名称:

SELECT * FROM Person_details  
WHERE Mobile_number = '{(444)-333-1234}';

输出

在执行上面的命令,我们会得到下面的输出,我们成功地识别出人的名字,其手机号码为(444)-333-1234,这是麦克·泰勒

PostgreSQL Create Index

很容易理解数据库必须扫描完整的Person_details\表来识别Person_name,因为Mobile_number列没有索引。

在这里,我们可以使用EXPLAIN命令查看查询计划,如下面的命令所示:

EXPLAIN SELECT *  
FROM Person_details  
WHERE Mobile_number = '{(444)-333-1234}';

输出

执行上述命令后,我们会得到下面的输出,其中显示了查询计划Person_details\表。

PostgreSQL Create Index

现在为了创建新索引,我们在以下命令的帮助下从Person 详细信息\表的Moblie_phone列中获取值:

CREATE INDEX idx_Person_details_Mobile   
ON Person_details(Mobile_number);

输出

执行上述命令时,我们将收到以下消息:已成功创建idx_Person_details_Mobile索引。

PostgreSQL Create Index

如果我们要识别数据库引擎,其中包含用于查找的索引,那么我们可以再次使用上面的解释命令,如下命令所示:

EXPLAIN SELECT *  
FROM Person_details  
WHERE Mobile_number = '{(444)-333-1234}';

输出

执行上述命令,我们将得到以下消息,其中显示了Person_details\表的查询计划。

PostgreSQL Create Index

概述

在 PostgreSQL 中,我们有Single-index column index,这有助于我们增强 PostgreSQL Indexes 的性能。

PostgreSQL Create Index部分,我们学习了以下主题:

  • 我们已使用 CREATE Index命令为特定表创建新索引。