关于 PostgreSQL 索引
指数是什么?
-
- データベースの性能を向上させるための一般的な方法。
-
- テーブルにインデックスを作成することで、データ検索時にインデックスの位置を直接アクセスすることができるため、検索速度を上げることができる。
-
- インデックスが設定されていない場合の検索では、テーブルの最初から順番に1件ずつ探すため、時間がかかり、パフォーマンスが下がる。
- インデックスには検索に特化した様々なデータ構造がある。
※数据结构:在计算机处理数据时,指以固定格式存储数据的一种方式。
具体例)数组和链表等都是一种数据结构。
在编写程序时,需要预先考虑要执行的操作,并选择最适合该操作的数据结构。为此,了解各种数据结构的特点十分重要。
メリットデメリットインデックスを作成しておけば、データ抽出の際にカラムに設定されたインデックスを検索するので、データベースの負担も軽減し、なおかつ検索効率がアップする。インデックスを作成しても必ずパフォーマンスが向上するとは限らない。インデックス設定により検索対象のテーブルの更新速度が下がる等のデメリットがある。また、インデックスを設定しても性能が上らないケースもある。
索引的特点 de
-
- 検索処理を効率化し、性能を上げるために使用される
-
- ただし、作成することで必ず性能が向上するという保証はないため、作成時には注意が必要である
-
- インデックスは未使用であっても整合性が取れるように管理されるため、更新処理が遅くなる可能性がある
-
- 複数カラムを組み合わせて作成することもできる
-
- 主キー制約やユニーク制約を定義すると自動で作成される
-
- インデックスに使用できるインデックスの種類はB-Tree、GiST、GIN、ハッシュである
- インデックスを作成しても、WHERE句などの条件でインデックスの作成されているカラムが使用されていない場合、インデックスは使用されない
各种指数
-
- PostgreSQLでは、B-tree、R-tree、Hash、GiSTといった複数の種類のインデックスを使用することができる。
-
- 扱うデータによって使い分ける。
- 一般的に、PostgreSQLではデフォルトのB-treeが使用される。
创建索引
-
- デフォルトで、B-treeインデックスを作成する。
-
- インデックスの作成方法は以下の3通り
-
- 書式:
①CREATE INDEX インデックス名 ON テーブル名(カラム名);
②CREATE TABLE テーブル名(カラム名 型,カラム名 型, … INDEX(カラム名);
③ALTER TABLE テーブル名 ADD INDEX インデックス名(カラム名);
创建索引
格式:在表名(列名)上创建索引索引名;
postgres=# CREATE INDEX idx_zip ON tbl_Address(zip);
在创建表的同时也创建索引。
创建表格:CREATE TABLE 表格名称 (列名称 类型, 列名称 类型, … INDEX(列名称);
postgres=# CREATE TABLE tbl_Address(
postgres-# UserID INT NOT NULL PRIMARY KEY,
postgres-# Zip CHAR(8) DEFAULT NULL,
postgres-# Ken CHAR(5) DEFAULT NULL,
postgres-# Addr VARCHAR(200) DEFAULT NULL,
postgres-# INDEX idx_zip(zip)
postgres-# );
③在之后向数据表中添加索引
書式:ALTER TABLE 表名 添加索引 索引名(列名);
postgres=# ALTER TABLE tbl_Address ADD INDEX idx_zip(zIP);
删除索引
书式:删除索引名为「インデックス名」的索引。
postgres=# CREATE INDEX idx_zip;
更改索引
更改索引的名称
书写格式:ALTER INDEX “索引名” 重命名为 “新索引名”;
postgres=# ALTER INDEX idx_zip RENAME TO new_idx_zip;
确认索引
-
- テーブルのカラムの情報を取得した時(/d)に、どのカラムに対してインデックスが作成されているのかの情報も表示される。
-
- インデックス名 インデックスの種類(対象のカラム)
例)”idx_zip” btree (zip)
postgres=# \d tbl_Address
请查看索引列表。
- テーブルに限らず、存在しているインデックスの一覧を確認する。
postgres=# \di