Man page - create_index(7)

Manual

CREATE INDEX

NAME
SYNOPSIS
DESCRIPTION 描 述
PARAMETERS 引 數
NOTES 注 意
EXAMPLES 例 子
COMPATIBILITY 相 容 性
譯 者


NAME

CREATE INDEX - 定 義 一 個 新 索 引

SYNOPSIS

CREATE [ UNIQUE ] INDEX name ON table [ USING method ]
( { column | ( expression ) } [ opclass ] [, ...] )
[ WHERE predicate ]

DESCRIPTION 描 述

CREATE INDEX 在 指 定 的 表 上 構 造 一 個 名 為 index_name 的 索 引 。 索 引 主 要 用 來 提 高 資 料 庫 效 能 。 但 是 如 果 不 恰 當 的 使 用 將 導 致 效 能 的 下 降 。

索 引 的 鍵 字 欄 位 是 以 欄 位 名 的 方 式 宣 告 的 , 或 者 是 可 選 的 寫 在 一 個 圓 括 弧 裡 面 的 表 示 式 。 如 果 索 引 方 式 支 援 多 個 欄 位 索 引 , 那 麼 我 們 也 可 以 宣 告 多 個 欄 位 。

一 個 索 引 欄 位 可 以 是 一 個 使 用 表 的 行 的 一 個 或 多 個 欄 位 的 數 值 進 行 計 算 的 表 示 式 。 整 個 特 性 可 用 於 獲 取 對 基 本 資 料 某 種 變 形 的 快 速 訪 問 。 比 如 , 一 個 在 upper(col) 上 的 函 式 索 引 將 允 許 子 句 WHERE upper(col) = ’JIM’ 使 用 索 引 。

PostgreSQL 為 從 索 引 提 供 B-tree, R-tree, hash( 雜 湊 ) 和 GiST 索 引 方 法 。 B-tree 索 引 方 法 是 一 個 Lehman-Yao 高 併 發 B-trees 的 實 現 。 R-tree 索 引 方 法 用 Guttman 的 二 次 分 裂 演 算 法 實 現 了 標 準 的 R-trees。 hash( 雜 湊 ) 索 引 方 法 是 Litwin 的 線 性 雜 湊 的 一 個 實 現 。 使 用 者 也 可 以 定 義 它 們 自 己 的 索 引 方 法 , 但 這 個 工 作 相 當 複 雜 。

如 果 出 現 了 WHERE 子 句 , 則 建 立 一 個 部 分 索 引 。 部 分 索 引 是 一 個 只 包 含 表 的 一 部 分 記 錄 的 索 引 , 通 常 是 該 表 中 最 讓 人 感 興 趣 的 部 分 。 比 如 , 如 果 你 有 一 個 表 , 裡 面 包 含 已 上 賬 和 未 上 賬 的 定 單 , 未 上 賬 的 定 單 隻 佔 表 的 一 小 部 分 而 且 這 部 分 是 最 常 用 的 部 分 , 那 麼 你 就 可 以 透 過 只 在 這 個 部 分 建 立 一 個 索 引 來 改 善 效 能 。 另 外 一 個 可 能 的 用 途 是 用 WHERE 和 UNIQUE 強 制 一 個 表 的 某 個 子 集 的 唯 一 性 。

在 WHERE 子 句 裡 用 的 表 示 式 只 能 引 用 下 層 表 的 欄 位 ( 但 是 它 可 以 使 用 所 有 欄 位 , 而 不 僅 僅 是 被 索 引 的 欄 位 ) 。 目 前 , 子 查 詢 和 聚 集 表 示 式 也 不 能 出 現 在 WHERE裡 。

索 引 定 義 裡 的 所 有 函 式 和 運 算 子 都 必 須 是 immutable, ( 不 變 的 ) 也 就 是 說 , 它 們 的 結 果 必 須 只 能 依 賴 於 它 們 的 輸 入 引 數 , 而 決 不 能 依 賴 任 何 外 部 的 影 響 ( 比 如 另 外 一 個 表 的 內 容 或 者 當 前 時 間 ) 。 這 個 約 束 確 保 該 索 引 的 行 為 是 定 義 完 整 的 。 要 在 一 個 索 引 上 使 用 使 用 者 定 義 函 式 , 請 記 住 在 你 建 立 它 的 時 候 把 它 標 記 為 immutable的 函 式 。

PARAMETERS 引 數

UNIQUE

令 系 統 檢 測 當 索 引 建 立 時 ( 如 果 資 料 已 經 存 在 ) 和 每 次 新 增 資 料 時 表 中 是 否 有 重 複 值 。 如 果 插 入 或 更 新 的 值 會 導 致 重 複 的 記 錄 時 將 生 成 一 個 錯 誤 。

name

要 建 立 的 索 引 名 。 這 裡 不 能 包 含 模 式 名 ; 索 引 總 是 在 同 一 個 模 式 中 作 為 其 父 表 建 立 的 。

table

要 索 引 的 表 名 ( 可 能 有 模 式 修 飾 ) 。

method

用 於 索 引 的 方 法 的 名 字 。 可 選 的 名 字 是 btree, hash, rtree, 和 gist。 預 設 方 法 是 btree。

column

表 的 列 /欄 位 名 。

expression

一 個 基 於 該 表 的 一 個 或 多 個 欄 位 的 表 示 式 。 這 個 表 示 式 通 常 必 須 帶 著 圓 括 弧 包 圍 寫 出 , 如 語 法 中 顯 示 那 樣 。 不 過 , 如 果 表 示 式 有 函 式 呼 叫 的 形 式 , 那 麼 圓 括 弧 可 以 省 略 。

opclass

一 個 關 聯 的 運 算 子 表 。 參 閱 下 文 獲 取 細 節 。

predicate

為 一 個 部 分 索 引 定 義 約 束 表 示 式 。

NOTES 注 意

參 閱 ‘‘Indexes’’ 獲 取 有 關 何 時 使 用 索 引 , 何 時 不 使 用 索 引 , 以 及 哪 種 情 況 下 是 有 用 的 資 訊 。

目 前 , 只 有 B-tree 和 gist 索 引 方 法 支 援 多 欄 位 索 引 。 預 設 時 最 多 可 以 宣 告 32 個 鍵 字 ( 這 個 限 制 可 以 在 製 作 PostgreSQL 時 修 改 ) 。 目 前 只 有 B-tree 支 援 唯 一 索 引 。

可 以 為 索 引 的 每 個 列 /欄 位 宣 告 一 個 運 算 子 表 。 運 算 子 表 標 識 將 要 被 該 索 引 用 於 該 列 /欄 位 的 運 算 子 。 例 如 , 一 個 四 位 元 組 整 數 的 B-tree 索 引 將 使 用 int4_ops 表 ; 這 個 運 算 子 表 包 括 四 位 元 組 整 數 的 比 較 函 式 。 實 際 上 , 該 域 的 資 料 型 別 的 預 設 運 算 子 表 一 般 就 足 夠 了 。 某 些 資 料 型 別 有 運 算 子 表 的 原 因 是 , 它 們 可 能 有 多 於 一 個 的 有 意 義 的 順 序 。 例 如 , 我 們 對 複 數 型 別 排 序 時 有 可 能 以 絕 對 值 或 者 以 實 部 。 我 們 可 以 透 過 為 該 資 料 型 別 定 義 兩 個 運 算 子 表 , 然 後 在 建 立 索 引 的 時 候 選 擇 合 適 的 表 來 實 現 。 有 關 運 算 子 表 更 多 的 資 訊 在 ‘‘Operator Classes’’ 和 ‘‘Interfacing Extensions to Indexes’’ 裡 。

使 用 DROP INDEX [ drop_index (7)] 刪 除 一 個 索 引 。

EXAMPLES 例 子

在 表 films上 的 title欄 位 建 立 一 個 B-tree 索 引 :

CREATE UNIQUE INDEX title_idx ON films (title);

COMPATIBILITY 相 容 性

CREATE INDEX 是 PostgreSQL 語 言 擴 充 套 件 。 在 SQL 標 準 中 沒 有 CREATE INDEX 命 令 。

譯 者

Postgresql 中 文 網 站 何 偉 平 <laser@pgsqldb.org>

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。
中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh