PostgreSQL索引的重要特点、创建、类型、删除及如何避免使用?

2018-09-1713:29:47数据库教程Comments3,238 views字数 1459阅读模式

什么是索引?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

索引是用于加速从数据库检索数据的特殊查找表。数据库索引类似于书的索引(目录)。 索引为出现在索引列中的每个值创建一个条目。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

数据库索引的重要特点

  • 索引使用SELECT查询和WHERE子句加速数据输出,但是会减慢使用INSERTUPDATE语句输入的数据。
  • 您可以在不影响数据的情况下创建或删除索引。
  • 可以通过使用CREATE INDEX语句创建索引,指定创建索引的索引名称和表或列名称。
  • 还可以创建一个唯一索引,类似于唯一约束,该索引防止列或列的组合上有一个索引重复的项。

PostgreSQL创建索引

CREATE INDEX语句用于创建PostgreSQL索引。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

语法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

CREATE INDEX index_name ON table_name;
SQL

索引类型

PostgreSQL中有几种索引类型,如B-treeHashGiSTSP-GiSTGIN等。每种索引类型根据不同的查询使用不同的算法。 默认情况下,CREATE INDEX命令使用B树索引。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

单列索引

如果仅在一个表列中创建索引,则将其称为单列索引。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

CREATE INDEX index_name  
ON table_name (column_name);
SQL

示例

我们有一个名为“EMPLOYEES”的表,具有以下数据:
PostgreSQL索引的重要特点、创建、类型、删除及如何避免使用?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

在表“EMPLOYEES”的“name”列上创建一个名为“employees_index”的索引。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

执行以下创建语句:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

CREATE INDEX employees_index  
ON EMPLOYEES (name);
SQL

执行结果如下 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

PostgreSQL索引的重要特点、创建、类型、删除及如何避免使用?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

在这里,您可以看到在该表上创建了一个名为“employees_index”的索引 -
PostgreSQL索引的重要特点、创建、类型、删除及如何避免使用?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

多列索引

如果通过使用表的多个列创建索引,则称为多列索引。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

CREATE INDEX index_name  
ON table_name (column1_name, column2_name);
SQL

让我们在同一个表“EMPLOYEES”上创建一个名为“multicolumn_index”的多列索引文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

执行以下创建查询语句:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

CREATE INDEX multicolumn_index  
ON EMPLOYEES (name, salary);
SQL

执行结果如下 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

PostgreSQL索引的重要特点、创建、类型、删除及如何避免使用?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

唯一索引

创建唯一索引以获取数据的完整性并提高性能。它不允许向表中插入重复的值,或者在原来表中有相同记录的列上也不能创建索引。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

CREATE UNIQUE INDEX index_name  
on table_name (column_name);
SQL

例如,在employees表的name字段上创建一个唯一索引,将会提示错误 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

CREATE UNIQUE INDEX unique_on_name  
on employees (name);
SQL

如下所示(name字段中有两个Minsu的值) -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

PostgreSQL索引的重要特点、创建、类型、删除及如何避免使用?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

PostgreSQL删除索引

DROP INDEX方法用于删除PostgreSQL中的索引。 如果你放弃一个索引,那么它可以减慢或提高性能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

语法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

DROP INDEX index_name;
SQL

作为一个示例,我们现在来删除在前面创建的名为“multicolumn_index”的索引。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

执行以下查询语句:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

DROP INDEX multicolumn_index;
SQL

现在,您可以看到名为“multicolumn_index”的索引已被删除/删除。查看 employees 表的结构 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

PostgreSQL索引的重要特点、创建、类型、删除及如何避免使用?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html

什么时候应该避免使用索引?

  • 应该避免在小表上使用索引。
  • 不要为具有频繁,大批量更新或插入操作的表创建索引。
  • 索引不应用于包含大量NULL值的列。
  • 不要在经常操作(修改)的列上创建索引。
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/4938.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/sjk/4938.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定