PostgreSQL Create Index PostgreSQL Indexes PostgreSQL Drop 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,如图中下面的截图: 在下面的命令中,我们将尝试识别Mobile_number 为 (444)-333-1234的 Person 名称: SELECT * FROM Person_details WHERE Mobile_number = '{(444)-333-1234}'; 输出 在执行上面的命令,我们会得到下面的输出,我们成功地识别出人的名字,其手机号码为(444)-333-1234,这是麦克·泰勒。 很容易理解数据库必须扫描完整的Person_details\表来识别Person_name,因为Mobile_number列没有索引。 在这里,我们可以使用EXPLAIN命令查看查询计划,如下面的命令所示: EXPLAIN SELECT * FROM Person_details WHERE Mobile_number = '{(444)-333-1234}'; 输出 执行上述命令后,我们会得到下面的输出,其中显示了查询计划的Person_details\表。 现在为了创建新索引,我们在以下命令的帮助下从Person 详细信息\表的Moblie_phone列中获取值: CREATE INDEX idx_Person_details_Mobile ON Person_details(Mobile_number); 输出 执行上述命令时,我们将收到以下消息:已成功创建idx_Person_details_Mobile索引。 如果我们要识别数据库引擎,其中包含用于查找的索引,那么我们可以再次使用上面的解释命令,如下命令所示: EXPLAIN SELECT * FROM Person_details WHERE Mobile_number = '{(444)-333-1234}'; 输出 执行上述命令,我们将得到以下消息,其中显示了Person_details\表的查询计划。 概述 在 PostgreSQL 中,我们有Single-index column index,这有助于我们增强 PostgreSQL Indexes 的性能。 在PostgreSQL Create Index部分,我们学习了以下主题: 我们已使用 CREATE Index命令为特定表创建新索引。 PostgreSQL Indexes PostgreSQL Drop Index