开发者社区 问答 正文

DDL索引

同主键一样,分析型数据库中索引的概念也是弱化的。在前文中介绍分析型数据库拥有高度智能的自动化索引机制,所以通常用户无需亲自为自己的数据表配置索引。但是有一种情况例外:暨0.8版本下用户需要对某列进行Hash Join时,无论是事实表之间的Join还是事实表和维度表的Join,都需要为事实表的该列建立索引(公共云当前版本无需)。
建立索引的语句如下:<PRE prettyprinted? linenums>

  1. ALTER TABLE tbl_name ADD INDEX [index_name] [index_type] (index_col_name) [comment=’’];

其中,[index_type] 为索引类型,需要指定为HashMap,index_col_name 为被索引列的列名。例如:<PRE prettyprinted? linenums>
  1. ALTER TABLE db_name.table_name
  2.   ADD INDEX user_id_index HashMap (user_id)

批量导入表索引修改后,需要重新导入数据后生效。实时写入表一般在24小时内自动生效,或如果要加速这个过程,可以执行optimize table 命令:<PRE prettyprinted? linenums>
  1. optimize table <tablename>;

执行成功一段时间后,新的索引会生效。
0.9及以后版本中分析型数据库会自动处理Hash Join时的索引构建,故无需用户自行创建HashMap索引也可以进行Hash Join,因此HashMap索引被废弃。

展开
收起
nicenelly 2017-10-26 15:14:45 1916 分享 版权
阿里云 AI 助理回答

在分析型数据库中,索引的管理通常高度自动化,用户一般无需手动配置索引。然而,在特定版本(如0.8版本)下,若需执行Hash Join操作,特别是涉及事实表与维度表或事实表之间的Join时,用户需要为事实表中的关联列手动创建HashMap类型的索引以优化查询性能。创建索引的SQL语句格式如下:

ALTER TABLE tbl_name ADD INDEX [index_name] HashMap (index_col_name) [comment=''];

例如,为db_name.table_name表中的user_id列添加HashMap索引,命令如下:

ALTER TABLE db_name.table_name ADD INDEX user_id_index HashMap (user_id);

请注意,批量修改表索引后,需重新导入数据或等待实时写入表自动生效(一般在24小时内),若需加速生效过程,可执行optimize table命令:

optimize table;

此命令执行成功后,新建立的索引将在一段时间内生效。

但从0.9版本开始,分析型数据库已内置对Hash Join的优化,能够自动处理索引构建过程,因此不再需要用户手动创建HashMap索引来支持Hash Join操作,HashMap索引特性随之废弃。

重要提示: - 0.8版本特例需手动创建HashMap索引以支持Hash Join。 - 0.9及以上版本自动处理Hash Join索引,无需手动创建。 - 批量修改索引后需重新导入数据或等待自动生效/执行optimize table加速。 - 具体操作前,请确认当前使用的数据库版本及对应的操作指导。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答