返回顶部
首页 > 资讯 > 数据库 >postgresql——索引
  • 316
分享到

postgresql——索引

2024-04-02 19:04:59 316人浏览 八月长安
摘要

postgresql的索引postgresql提供的索引类型有:B-tree、hash、GISt和gin。大多情况下,B-tree索引比较常用,用户可以使用create index命令创建一个B-tree索

postgresql索引


postgresql提供的索引类型有:B-tree、hash、GISt和gin。大多情况下,B-tree索引比较常用,用户可以使用create index命令创建一个B-tree索引。


1、B-tree索引:

   B-tree适合处理那些能够按顺序存储的数据,比如对于一些字段涉及使用:< ,<= ,= ,>= 或 >操作符之一进行比较的时候,可以建立一个索引。

也可以使用B-tree索引搜索来实现与这些运算符的组合相同的构造,如BETWEEN和IN。此外,索引列上的IS NULL或IS NOT NULL条件可以与B-tree索引一起使用。

  对于涉及模式匹配运算符LIKE的查询,优化器还可以使用B-tree索引,如果模式是常量,并且锚定到字符串的开头,例如col LIKE 'foo%'或 col?'^ foo',但不能是col LIKE'%bar'。但是,如果您的数据库不使用C语言环境,则需要使用特殊的运算符类创建索引,以支持对模式匹配查询的索引;见下文第11.9节。也可以对 ILIKE和?*使用B-tree索引,但只有当模式以非字母字符(即不受大小写转换影响的字符)开始时才可以。


2、hash索引:

  hash索引只能处理简单的等于比较。当一个索引的列涉及使用=操作符进行比较的时候,查询规划器会考虑使用hash索引。

Hash索引操作目前不记录WAL-log,所以如果有没有写入的更改,Hash索引可能需要在数据库崩溃后用REINDEX重建。此外,在初始基本备份之后,不会通过流式或基于文件的复制来复制Hash索引的更改,因此它们对随后使用它们的查询给出错误的答案。由于这些原因,目前不鼓励使用Hash索引。


3、gist索引:

   gist索引不是单独一种索引类型,而是一种架构,可以在这种架构上实现很多不同的索引策略。因此,可以使用gist索引的特定操作符类型高度依赖于索引策略(操作符类 )

GiST索引不是一种单一的索引,而是可以实现许多不同索引策略的基础设施。因此,可以使用GiST索引的特定运算符根据索引策略(运算符类)而变化。


4、GIN索引

   GIN索引是反转索引,可以处理包含多个键的值(比如数组)。与gist类似,gin支持用户定义的索引策略,可以使用GIN索引的特定操作符类型根据索引策略的不同而不同 。



索引的设计原则:

①:索引并非越多越好。如果一个表中有大量的索引,那么不仅会占用大量磁盘空间,还会影响:insert、delete、update等语句的性能,因为更改表中的数据时,索引也会进行调整和更新。

②:避免对经常更新的表进行过多索引,并且索引中的列要尽可能少。对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。

③:数据量小的表最好不要使用索引。数据较少时,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。

④:在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。

⑤:当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引能够确保定义的列的数据完整性,提高查询速度。

⑥:在频繁进行排序或分组(进行group by或order by操作)的列上建立索引。如果待排序的列有多个,可以在这些列上建立组合索引。



---常见操作:(注意:默认创建的是B-tree索引)


基本语法:

create [unique |fulltext |spatial]  index  index_name  on  table_name  (col_name[length],....)  [ ASC | DESC ]


1、创建普通索引:B-tree索引

create index idx_contacts_name on contacts(name);


--创建唯一索引:

create  unique index idx_emp  on  emp(id);


--创建组合索引:

create  index  idx_emp  on  emp(id,name); 



2、数组索引

create index idx_contacts_phone on contacts using gin(phone);


注:phone在contacts表中是一个数组类型


3、降序索引

create index idx_contacts_name on contacts(name desc);


4、指定存储参数

create index idx_contacts_name on contacts(name) with(fillfactor=50);


注:fillfactor是常用的存储参数


5、指定空值排在前面

create index idx_contacts_name on contacts(name desc nulls first);


6、避免创建索引的长时间阻塞,可以在index关键字后面增加concurrently关键字,可以减少索引的阻塞时间

create index concurrently idx_contacts_name on contacts(name desc);


注意,重建索引时不支持concurrently ,可以新建一个索引,然后删除旧索引,另外并发索引被强制取消,可能会留下无效索引,这个索引将会导致更新变慢,如果是唯一索引,还会导致插入重复值失败。


7、修改索引


索引重命名:alter index name rename to new_name;


设置表空间:alter index name set tablespace tablespace_name;


设置存储参数:alter index name set(storage_parameter=value[,...])


重设存储参数:alter index name reset(storeage_parameter[,...])


8、删除索引

drop index if exists idx_emp;


8、cascade会把索引和依赖索引的对象全部删除


您可能感兴趣的文档:

--结束END--

本文标题: postgresql——索引

本文链接: https://lsjlt.com/news/37131.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • postgresql——索引
    postgresql的索引postgresql提供的索引类型有:B-tree、hash、gist和gin。大多情况下,B-tree索引比较常用,用户可以使用create index命令创建一个B-tree索...
    99+
    2024-04-02
  • PostgreSQL的B-tree索引
    结构B-tree索引适合用于存储排序的数据。对于这种数据类型需要定义大于、大于等于、小于、小于等于操作符。通常情况下,B-tree的索引记录存储在数据页中。叶子页中的记录包含索引数据(keys)以及指向he...
    99+
    2024-04-02
  • postgresql 索引使用参考
    通常在postgresql创建普通索引如下create index idx_table_name_x1 on table_name(col_name);reate index 执行后在创建索引期间会阻塞 d...
    99+
    2024-04-02
  • PostgreSQL中怎么创建索引
    在 PostgreSQL 中,可以使用 CREATE INDEX 语句来创建索引。语法如下: CREATE INDEX index_...
    99+
    2024-04-09
    PostgreSQL
  • PostgreSQL中如何创建索引
    在 PostgreSQL 中,可以使用以下语法来创建索引: 1、创建一个基本索引: CREATE INDEX index_name ...
    99+
    2024-04-02
  • PostgreSQL 10数据类型与索引
    PostgreSQL 10常用的索引类型有btree,hash,gin,gist,spgist,brin六种,btree和hash是最长用的,基本所有数据类型都支持,以下对gin,gist,spgist,b...
    99+
    2024-04-02
  • 怎么使用PostgreSQL中Hash索引
    本篇内容介绍了“怎么使用PostgreSQL中Hash索引”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!逻...
    99+
    2024-04-02
  • 怎么在postgresql中创建索引
    在postgresql中创建索引的方法:1.启动postgresql服务;2.登录postgresql数据库;3.使用数据库;4.在数据库新建表;5.使用CREATE INDEX命令创建索引;具体步骤如下:首先,在命令行中启动postgre...
    99+
    2024-04-02
  • PostgreSQL索引失效会发生什么
    前段时间碰到个奇怪的索引失效的问题,实际情况类似下面这样: bill=# begin; BEGIN bill=*# create index idx_t1 on t1(id); CREATE INDEX bill=*# ...
    99+
    2024-04-02
  • postgresql 9.6 建立多列索引测试
    建立测试表结构CREATE TABLE t_test(    id integer,    name text COLLATE pg_catalog."default...
    99+
    2024-04-02
  • 怎么使用PostgreSQL中的Bloom索引
    这篇文章主要讲解了“怎么使用PostgreSQL中的Bloom索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用PostgreSQL中的Bloom索...
    99+
    2024-04-02
  • PostgreSQL中的GIN索引有什么作用
    本篇内容主要讲解“PostgreSQL中的GIN索引有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中的GIN索引有什么作用”吧!G...
    99+
    2024-04-02
  • PostgreSQL中的Btree索引有什么作用
    本篇内容主要讲解“PostgreSQL中的Btree索引有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中的Btree索引有什么作用...
    99+
    2024-04-02
  • postgresql索引创建的方法是什么
    在PostgreSQL中,可以使用以下方法来创建索引: 创建唯一索引: CREATE UNIQUE INDEX index_na...
    99+
    2024-04-09
    postgresql
  • postgresql索引查看的方法是什么
    要查看 PostgreSQL 数据库中的索引,可以使用以下 SQL 命令: SELECT tablename, indexn...
    99+
    2024-04-09
    postgresql
  • postgresql索引的排序规则是什么
    在PostgreSQL中,索引的排序规则取决于索引的类型。主要有以下几种排序规则: B-tree 索引:B-tree 是最常见的...
    99+
    2024-04-09
    postgresql
  • PostgreSQL中的空间索引和搜索算法如何运作
    在PostgreSQL中,空间索引是一种特殊的索引,用于在空间数据类型(如点、线、多边形等)上进行快速搜索和查询。空间索引主要用于支...
    99+
    2024-04-02
  • 分析PostgreSQL中用于索引维护的查询
    这篇文章主要讲解了“分析PostgreSQL中用于索引维护的查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析PostgreSQL中用于索引维护的查询”...
    99+
    2024-04-02
  • PostgreSQL索引分类及使用的示例分析
    这篇文章给大家分享的是有关PostgreSQL索引分类及使用的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.索引方式PostgreSQL数据库支持单列index,多列...
    99+
    2024-04-02
  • mysql索引(覆盖索引,联合索引,索引下推)
    目录什么是索引?索引的实现方式innodb的索引模型索引维护覆盖索引联合索引索引下推什么是索引? 当我们使用汉语字典查找某个字时,我们会先通过拼音目录查到那个字所在的页码,然后直接翻到字典的那一页,找到我们要查的字,通过...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作