概述

全局索引是Phoenix的重要特性,合理的使用二级索引能降低查询延时,让集群资源得以充分利用。 本文将讲述如何高效的设计和使用索引。

全局索引说明

全局索引的根本是通过单独的HBase表来存储数据表的索引数据。我们通过如下示例看索引数据和主表数据的关系。

-- 创建数据表
CREATE TABLE DATA_TABLE(A VARCHAR PRIMARY KEY,B VARCHAR,C INTEGER,D INTEGER);-- 创建索引
CREATE INDEX B_IDX ON DATA_TABLE(B)INCLUDE(C);-- 插入数据
UPSERT INTO DATA_TABLE VALUES('A','B',1,2);

当写入数据到主表时,索引数据也会被同步到索引表中。索引表中的主键将会是索引列和数据表主键的组合值,include的列被存储在索引表的普通列中,其目的是让查询更加高效,只需要查询一次索引表就能够拿到数据,而不用去回查主表。其过程入下图:

Phoenix表就是HBase表,而HBase Rowkey都是通过二进制数据的字典序排列存储,也就意味着Row key前缀匹配度越高就越容易排在一起。

全局索引设计

我们继续使用DATA_TABLE作为示例表,创建如下组合索引。之前我们已经提到索引表中的Row key是字典序存储的,什么样的查询适合这样的索引结构呢?

CREATE INDEX B_C_D_IDX ON DATA_TABLE(B,C,D);
所有字段条件以=操作符为例:

注:上表查询中and条件不一定要和索引组合字段顺序一致,可以任意组合。

在实际使用中我们也只推荐使用1~4,遵循前缀匹配原则,避免触发扫全表。5~7条件就要扫描全表数据才能过滤出来符合这些条件的数据,所以是极力不推荐的。

其它

  • 对于order by字段或者group by字段仍然能够使用二级索引字段来加速查询。
  • 尽量通过合理的设计数据表的主键规避建更多的索引表,因为索引表越多写放大越严重。
  • 使用了ROW_TIMESTAMP特性后不能使用全局索引
  • 对索引表适当是的使用加盐特性能提升查询写入性能,避免热点。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

[Phoenix] 十、全局索引设计实践相关推荐

  1. Phoenix:全局索引设计实践

    概述 全局索引是Phoenix的重要特性,合理的使用二级索引能降低查询延时,让集群资源得以充分利用. 本文将讲述如何高效的设计和使用索引. 全局索引说明 全局索引的根本是通过单独的HBase表来存储数 ...

  2. 直播:Phoenix 全局索引原理与实践

    讲师:瑾谦--阿里数据库产品专家 主题:Phoenix 全局索引原理与实践 内容概要:全局索引是Phoneix的核心特性之一,此话题主要内容包括phoenix mutable表全局索引机制原理, 场景 ...

  3. SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)

    SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.什么是索引? SQL索引有两种,聚集索引和非聚集索引,索 ...

  4. HBase 集成 Phoenix 构建二级索引实践

    Phoenix 在 HBase 生态系统中占据了非常重要的地位,本文主要包括以下几方面内容: Phoenix 介绍 CDH HBase 集成 Phoenix 使用 Phoenix 创建 HBase 二 ...

  5. 【Mysql性能调优】高性能表结构及索引设计的最优实践

    数据库表设计 良好的表结构设计是高性能的基石,应该根据系统将要执行的业务查询来设计,这往往需要权衡各种因素.糟糕的表结构设计,会浪费大量的开发时间,严重延误项目开发周期,让人痛苦万分,而且直接影响到数 ...

  6. EntityFramework之领域驱动设计实践(十)(转)

    http://www.cnblogs.com/daxnet/archive/2010/07/19/1780764.html 规约(Specification)模式 本来针对规约模式的讨论,我并没有想将 ...

  7. 高并发、高性能下的 会员系统[同程艺龙] — 高可用架构设计实践

    目录 会员系统[同程艺龙] - 高可用架构设计实践 ES高可用方案 ES双中心主备集群架构 ES流量隔离三集群架构 ES集群深度优化提升 会员Redis缓存方案 Redis双中心多集群架构 高可用会员 ...

  8. DTCC 2020 | 阿里云梁高中:DAS基于Workload的全局自动优化实践

    简介:第十一届中国数据库技术大会(DTCC2020),在北京隆重召开.在12.23日性能优化与SQL审计专场上,邀请了阿里巴巴数据库技术团队高级技术专家梁高中为大家介绍DAS之基于Workload的全 ...

  9. DTCC 2020 | 阿里云梁高中:DAS之基于Workload的全局自动优化实践

    简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开.在12.23日性能优化与SQL审计专场上,邀请了阿里巴巴数据库技术团队高级技术专家梁高中为大家介绍DAS之基于Workload的 ...

最新文章

  1. 根据字符出现频率排序
  2. python手机版怎么运行项目或脚本-python可以在手机上运行吗
  3. 项目实战解决 java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password‘.
  4. (转载)用oracle触发器对记录表增加记录的问题
  5. Mock完成单元测试
  6. JavaScript中DOM的层次节点(一)
  7. 《深入解析Android 虚拟机》——导读
  8. angularjs教程_AngularJS活动教程
  9. C# 7.0特性与vs2017
  10. FTP+MySQL虚拟用户
  11. javascript中replace()用法详解+match() 定义和用法
  12. 分布式文件存储FastDFS之安装Nginx实现文件访问
  13. 计算机截图方法,电脑7种快速截图方法,很多人都不知道!
  14. android实现带下划线的密码输入框
  15. 结构体初识———结构体成员
  16. GPT模型总结【模型结构及计算过程_详细说明】
  17. 何为水仙花?点开让我们直接了解
  18. 运维 ---linux基础
  19. 12. tie_breaker的使用原因和使用方法
  20. 先进事迹如何写出深度?到底怎么做

热门文章

  1. c语言源程序文件.c如何保存,急求如何将下列C语言程序数据存储到文件中?
  2. svd奇异值分解_奇异值分解SVD
  3. server 群辉emby_群晖容器中搭建支持硬件编码的Emby Server教程及注意事项
  4. c# out关键字 vb_c# 关键字:ref 和 out
  5. pdf无法启动因计算机丢失,解决打开 PDF 文件时出现的文档损坏错误
  6. 国家自然科学基金2020年预算减少22亿元
  7. Python 拯救你的人生颓
  8. CGCKD2021大会报告整理(2)--因果推断与因果域适应学习
  9. mysql 数据仓库 元数据_数据仓库中的元数据管理
  10. oracle9i 随机端口_修改 Oracle9i 8080端口问题