`
骑猪逛街666
  • 浏览: 143899 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自动建立正确索引(btree,hash,gin,gist,sp-gist,brin,bitmap...)的方法

阅读更多
阅读原文请点击;http://click.aliyun.com/m/23941/
摘要: 标签 PostgreSQL , 索引接口 , 自动创建索引 , 自动选择索引接口 , (btree,hash,bitmap,gin,gist,sp-gist,brin,rum,bloom,zoomdb) 背景 PostgreSQL的索引接口是开放的,支持btree,hash,bitmap,gin,gist,sp-gist,brin,rum,bloom,zoomdb等索引接口。

标签

PostgreSQL , 索引接口 , 自动创建索引 , 自动选择索引接口 , (btree,hash,bitmap,gin,gist,sp-gist,brin,rum,bloom,zoomdb)

背景

PostgreSQL的索引接口是开放的,支持btree,hash,bitmap,gin,gist,sp-gist,brin,rum,bloom,zoomdb等索引接口。因此,不同的数据类型,有不同的索引结构可以选择。

由于索引接口众多(应对不同的场景),一些用户可能无法判断应该选择使用哪种索引方法。

虽然我在很多文章中有提到过索引的原理以及选择方法,但是一切为懒人服务,所以我们看看如何把创建索引变得更简单,让数据库自动选择最合适的索引方法。

如果你想了解各种索引的用途,你也可以参考一下手册或者以下CASE的文章,了解索引的原理和应用场景。

《懒人推动社会进步 - 多列聚合, gin与数据分布(选择性)》

语法

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ] 
    ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) 
    [ WITH ( storage_parameter = value [, ... ] ) ] 
    [ TABLESPACE tablespace_name ] 
    [ WHERE predicate ] 
索引选择的要素

必要约束

1、如果用户要创建 unique 索引,那么只能选择btree索引接口。

2、某些类型指支持某类索引接口,例如数组类型、全文检索类型,只支持GIN索引。GIS类型只支持gist或sp-gist索引。

选择性

如果某个类型支持多种索引接口,那么到底选择哪种接口比较好呢?

和数据的选择性是有关系的。

1、选择性差(例如1亿记录,有100-10万 条唯一值),建议使用gin或bitmap索引。

2、选择性好(例如1亿记录,有8000万唯一值),建议使用btree或hash索引。

数据分布

1、对于数据值与行号呈现较强的线性相关特性时,加入用户没有按该列顺序输出的需求。则建议使用brin块级索引。

2、当列长度超过数据块的1/3时,不能使用btree,建议使用hash索引。或者使用表达式btree索引,建少索引entry的大小。

查询需求

如果某个类型支持多种索引接口,那么到底选择哪种接口比较好呢?

和数据的查询需要也是有关系的。

1、范围查询、排序查询、等值查询
阅读原文请点击;http://click.aliyun.com/m/23941/
分享到:
评论

相关推荐

    最新老男孩Mysql标杆班day06.rar

    4.2020-开年标杆班-day06-MySQL-聚簇索引BTREE结构 5.2020-开年标杆班-day06-MySQL-辅助索引BTREE结构 6.2020-开年标杆班-day06-MySQL-辅助索引细分 7.2020-开年标杆班-day06-MySQL-联合索引应用 8.2020-开...

    MySQL高级课程视频.zip

    - 索引 - 数据结构 - BTREE8. 索引 - 数据结构 - B+TREE9. MySQL 高级 - 索引 - 索引分类10. MySQL 高级 - 索引 - 索引语法11. MySQL 高级 - 索引 - 索引设计原则12. MySQL 高级 - 视图 - 概述13. - 视图 - 创建及...

    MySQL高级教程视频.zip

    07.索引 - 数据结构 - BTREE 08.索引 - 数据结构 - B+TREE 09.索引 - 索引分类 10.索引 - 索引语法 11.索引 - 索引设计原则 12.视图 - 概述 13.视图 - 创建及修改视图 14.视图 - 查看及删除视图 15.存储过程 - 概述 ...

    MySQL高级笔记.zip

    MySQL 高级 - 索引 - 数据结构 - BTREE P7 day01-08. MySQL 高级 - 索引 - 数据结构 - B+TREE P8 day01-09. MySQL 高级 - 索引 - 索引分类 P9 day01-10. MySQL 高级 - 索引 - 索引语法 P10 day01-11. MySQL 高级 - ...

    mysql高级笔记 P1 day01-02. MySQL 高级 - Linux上安装MySQL P2 day01-03. MyS

    MySQL 高级 - 索引 - 数据结构 - BTREE P7 day01-08. MySQL 高级 - 索引 - 数据结构 - B+TREE P8 day01-09. MySQL 高级 - 索引 - 索引分类 P9 day01-10. MySQL 高级 - 索引 - 索引语法 P10 day01-11. MySQL 高级 - ...

    MySQL高级教程视频

    MySQL 高级 - 索引 - 数据结构 - BTREE.avi │ │ 08. MySQL 高级 - 索引 - 数据结构 - B+TREE.avi │ │ 09. MySQL 高级 - 索引 - 索引分类.avi │ │ 10. MySQL 高级 - 索引 - 索引语法.avi │ │ 11. MySQL 高级...

    B-tree--BP-tree--B--tree--R-tree.rar_B+_R-Tree_b+tree_btree转换为rt

    将B树、B+树或B*树转换为R树通常是为了适应多维数据的处理需求,例如从平面坐标到地理坐标的转换,或者从一维索引到多维索引的升级。 了解这些数据结构的原理和特性,对于优化数据库性能、设计高效的数据存储方案至...

    【IT十八掌徐培成】Java基础第22天-03.MySQL常用命令avi.zip

    - 索引能加快查询速度,MySQL提供了多种类型的索引,包括BTree、Hash、Full-text等。 - 可以使用`CREATE INDEX`创建索引,`ALTER TABLE ADD INDEX`添加索引,`DROP INDEX`删除索引。 5. **存储过程和函数**: - ...

    Python库 | python_tables_lib-1.0.0-py3-none-any.whl

    6. **索引和查询**:Python Tables提供了多种索引方式,如BTree索引和BitMask索引,便于快速查找和过滤数据。 7. **并发访问**:HDF5文件格式支持多进程或多线程并发访问,Python Tables库也支持这种特性,允许在...

    btree索引.txt

    ### BTree索引详解 #### 一、BTree索引概念 BTree(平衡树)索引是数据库中一种常见的索引类型,特别是在关系型数据库系统中被广泛使用。它是一种自平衡的树数据结构,能够保持数据有序,并且允许进行高效的插入、...

    mysql 索引失效详解

    索引可以大幅度提高查询效率,但是如果不正确使用索引,可能会导致索引失效。索引失效是指MySQL 不能使用索引来加速查询,导致查询效率下降。 创建索引 --------- 创建索引的语法为:`CREATE INDEX 索引名 ON 表名...

    广工数据结构实验设计报告-B树(难度1.4).docx

    ADT BTree定义了以下基本操作: 1. CreatBTree(&T, n, m):创建一个阶数为m,包含n个关键字的B树。阶数m必须在3到20之间。 2. SearchBTree(T, k, &p):在B树T中查找关键字k,返回一个三元组(pt,i,tag),其中pt...

    Oracle-Btree索引.pptx

    Oracle-Btree索引,索引的ppt

    索引类型FULLTEXT,HASH,BTREE,RTREE,索引优化1

    本文将围绕MySQL数据库中常见的三种索引类型——FULLTEXT、HASH和BTREE——进行深入探讨,并简要提及RTREE索引。我们会分析它们的原理、存储结构、优缺点以及如何在实际应用中进行选择和优化。 首先,我们来看BTREE...

    PyPI 官网下载 | BTrees-4.1.3-py2.7-win32.egg

    BTree会自动保持键的排序,所以当你遍历btree时,键会按照升序出现: ```python for key in btree: print(key, btree[key]) ``` BTrees还支持高级操作,如批量插入、删除、查找以及范围查询。此外,BTree对象可以...

    MySQL Hash索引和B-Tree索引的区别

    MySQL中的索引是提高查询效率的关键工具,其中两种常见的索引类型是Hash索引和B-Tree索引。这两种索引各有特点,适用于不同的查询场景。 首先,Hash索引以其高效的查找性能脱颖而出。Hash索引的工作原理是通过索引...

    BerkeleyDB-Core-C-GSG.pdf

    - 如果数据项通过整数索引进行访问,则记录编号访问方法更为高效。 #### 数据库限制与移植性 Berkeley DB 设计时考虑到了广泛的平台兼容性和性能优化。尽管如此,开发者仍需关注不同环境下的限制条件,例如最大...

    sqlite-source-3_6_18.zip

    1. **btree.c**:这是SQLite的核心组件之一,实现了B树数据结构,用于存储和检索数据库表和索引。B树允许快速的插入、删除和查找操作,是关系数据库管理系统的常见选择。 2. **fts3.c**:全文搜索(Full-Text ...

    BerkeleyDB-Core-JAVA-GSG.pdf

    - 在选择BTree还是Hash时,如果数据的查询顺序很重要,则倾向于使用BTree;如果需要更快的写入速度,则选择Hash。 - Queue和Recno则分别针对具有特定顺序需求和固定大小记录的需求场景。 **3. 数据库限制与可移植...

    Mysql中的Btree与Hash索引比较

    MySQL中的Btree与Hash索引是两种常见的索引类型,每种都有其特定的适用场景和优缺点。这里我们将深入探讨这两种索引的特征以及它们在不同查询操作下的表现。 首先,Btree(B-Tree)索引是MySQL中最常用的索引结构,...

Global site tag (gtag.js) - Google Analytics