============ CREATE INDEX ============ .. container:: refentry :name: SQL-CREATEINDEX .. container:: titlepage .. container:: refnamediv .. rubric:: CREATE INDEX :name: create-index CREATE INDEX — 定义一个新索引 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis CREATE [ UNIQUE ] INDEX [ [ IF NOT EXISTS ] name ] ON [ ONLY ] table_name [ USING method ] .. container:: refsect1 :name: id-1.9.3.69.5 .. rubric:: 描述 :name: 描述 ``CREATE INDEX``\ 在指定关系的指定列上构建 一个索引,该关系可以是一个表或者一个物化视图。索引主要被用来提升 数据库性能(不过不当的使用会导致性能变差)。 OushuDB6.0目前支持 B-树索引。 .. container:: refsect1 :name: id-1.9.3.69.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``UNIQUE`` 导致系统在索引被创建时(如果数据已经存在)或者加入数据时 检查重复值。会导致重复项的数据插入或者更新尝试将会产生一 个错误。 当唯一索引被应用在分区边上时会有额外的限制,请参考\ `CREATE TABLE `__\ 。 ``IF NOT EXISTS`` 如果一个同名关系已经存在则不要抛出错误。这种情况下会发出一个提示。 注意着并不保证现有的索引与将要创建的索引有任何相似。当 ``IF NOT EXISTS``\ 被指定时,需要指定索引名。 *``name``* 要创建的索引名称。这里不能包括模式名,因为索引总是被创建在其基表所在 的模式中。如果索引名称被省略,PostgreSQL将基于基 表名称和被索引列名称选择一个合适的名称。 *``table_name``* 要被索引的表的名称(可以被模式限定)。 *``method``* 要使用的索引方法的名称: ``btree`` 默认方法是\ ``btree``\ 。 *``column_name``* 一个表列的名称。 .. container:: refsect1 :name: id-1.9.3.69.8 .. rubric:: 示例 :name: 示例 在表\ ``films``\ 中的列\ ``title``\ 上创建一个 B-树索引: .. code:: programlisting CREATE UNIQUE INDEX title_idx ON films (title); 要在表\ ``films``\ 的列\ ``title``\ 上创建一个唯一的B-树索引并且包括列\ ``director``\ 和\ ``rating``\ : .. code:: programlisting CREATE UNIQUE INDEX title_idx ON films (title) INCLUDE (director, rating); 在表达式\ ``lower(title)``\ 上创建一个索引来允许高效的大小写 无关搜索: .. container:: refsect1 :name: id-1.9.3.69.9 .. rubric:: 兼容性 :name: 兼容性 ``CREATE INDEX``\ 是一种 PostgreSQL的语言扩展。在 SQL 标准中 没有对于索引的规定。 .. container:: refsect1 :name: id-1.9.3.69.10 .. rubric:: 另见 :name: 另见 `ALTER INDEX `__, `DROP INDEX `__, `REINDEX `__