PostgreSQL Create Index创建索引
在本节中,我们将了解PostgreSQL Create Index的工作原理和Create indexes 命令的示例。
为什么我们使用 PostgreSQL 创建索引命令?
在PostgreSQL中,创建索引命令用于通过定义索引名称和创建索引的表或列名称来创建新索引。
PostgreSQL 创建索引命令的语法
创建索引命令的语法如下:
CREATE INDEX index_name ON table_name [USING method]
(
column_name [ASC | DESC] [NULLS {FIRST | LAST}],
...
);
在上面的语法中,我们使用了以下参数,如下表所示:
参数 | 描述 |
---|---|
Index_name |
|
Table_name |
|
Using[method] |
|
Column_name |
|
PostgreSQL Create Index创建索引示例
让我们看一个示例来了解PostgreSQL CREATE Indexes命令的工作原理。
但在讨论示例之前,我们将把索引和电话簿类比作为示例的一部分。
索引和电话目录类比
为了理解索引和电话簿类比的实例,我们有以下情况:
情况1:如果电话簿是按字母顺序排列的。
- 假设我们需要在电话簿中查看Mike Taylor的电话号码。
- 众所周知,电话簿中的姓名是按字母顺序排列的。
- 因此,首先,我们将检查那些姓氏为Taylor的页面,识别出名字为Mike的页面,最后检索他的电话号码。
情况2:如果电话簿不是按字母顺序排列的。
- 假设电话簿上的名字不是按字母顺序排列的。
- 因此,我们必须检查所有页面,就像检查所有姓名一样,直到我们找到Mike Taylor 的电话号码。
- 这个过程被称为顺序扫描,它将遍历所有条目,直到我们确定要搜索的条目。
注意事项:
与电话簿并行,表中存储的数据可以按特定顺序准备,以加速多次搜索;因此,我们使用了索引。
索引可以被认为是一种数据结构,例如B-Tree,它以进一步写入和存储为代价提高了表上数据检索的速率。
Person_deatils表包含各种列,如id、Person_name 和 Mobile_number,如下面的屏幕截图所示:
在下面的命令中,我们将尝试识别Mobile_number 为 (444)-333-1234的人名:
SELECT * FROM Person_details
WHERE Mobile_number = '{(444)-333-1234}';
执行上述命令后,我们将得到以下输出,我们在其中成功识别出手机号码为(444)-333-1234的人名,即Mike Taylor。
可以理解的是,数据库必须扫描完整的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命令,如下命令所示:
EXPLAIN SELECT *
FROM Person_details
WHERE Mobile_number = '{(444)-333-1234}';
执行上面的命令我们会得到如下信息,显示了Person_details表的查询计划。
热门文章
优秀文章