在Clickhouse中创建现有表的索引

4

我正在尝试在现有表上添加索引,使用以下语法。

创建联系人表... ( ....... 域名字符串, 主题字符串, 类别字符串 ...... ...... ..... ..... ) ENGINE = MergeTree PARTITION BY 类别 ORDER BY (主题,域名) SETTINGS index_granularity = 8192

I want to create an index on the topic column (granularity is 6020)

tried syntax from the documentation but unable to understand since there is no examples explaining the fields in it.

请有人能快速帮我解决这个问题吗。


3
请查看https://clickhouse.yandex/docs/en/operations/table_engines/mergetree/#primary-keys-and-indexes-in-queries。 - vladimir
3个回答

6

添加索引

这将向您的表添加元数据。旧数据没有被索引!新数据将被索引!该操作是轻量级的。

ALTER TABLE [db].name ADD INDEX name expression TYPE type GRANULARITY value [FIRST|AFTER name]

删除索引

元数据和索引文件将被删除。这是一项轻量级操作,对于数据库来说非常容易。

ALTER TABLE [db].name DROP INDEX name

索引实现

此操作会重新创建指定的索引。表中的所有数据都将被索引。通常在向表添加索引以包含预先存在的数据到索引后会运行此操作。

ALTER TABLE [db.]table MATERIALIZE INDEX name IN PARTITION partition_name

重建所有索引

您可以通过优化表来强制重新创建包括所有表数据的所有索引:

OPTIMIZE TABLE [db].name FINAL;

测试索引

ClickHouse没有查询提示,但有设置,它类似于并可添加到任何查询。有一些用于控制索引的设置:

use_skip_indexes - 在查询执行期间使用索引(>=v21.11)。可能的值:

  • 0 — 禁用
  • 1 — 启用(默认值)

force_data_skipping_indices 如果未使用传递的数据跳过索引,则禁用查询执行(>=v20.6.8.5)。

示例:

SELECT * FROM my_table WHERE my_column=1 SETTINGS use_skip_indexes=0;
SELECT * FROM my_table WHERE my_column=1 SETTINGS force_data_skipping_indices='my_index_name';

-- if index is not exiting DB will throw an error:
SELECT * FROM my_table WHERE my_column=1 SETTINGS force_data_skipping_indices='my_non_existing_index_name';
-- > DB::Exception: Index `my_non_existing_index_name` is not used and setting 'force_data_skipping_indices' contains it 

ClickHouse文档


5

如果有人需要相同的信息,我会将其放在此处。
语法如下:

ALTER TABLE  
[db name].[table name]  
ADD INDEX  
[any name for index]([columns to use])  
TYPE [index type: minmax, set, ngrambf_v1, tokenbf_v1 or bloom_filter - more info below]  
GRANULARITY [you can use default value - 8192]

这里有关于索引类型的更多信息


1

是的,你可以。

以下操作可用:

ALTER TABLE [db].name ADD INDEX name expression TYPE type GRANULARITY value AFTER name [AFTER name2] - Adds index description to tables metadata.

ALTER TABLE [db].name DROP INDEX name - Removes index description from tables metadata and deletes index files from disk.

ALTER TABLE [db.]table MATERIALIZE INDEX name IN PARTITION partition_name - The query rebuilds the secondary index name in the partition partition_name. Implemented as a mutation.

https://clickhouse.tech/docs/en/sql-reference/statements/alter/index/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接