我用的是 Data Skipping Indexes
clickhouse中的功能,我对它的用法感到困惑。如果在创建如下表时添加数据跳过索引:
CREATE TABLE MyTable
(
...
INDEX index_time TimeStamp TYPE minmax GRANULARITY 1
)
ENGINE =MergeTree()
...
当我询问 TimeStamp
过滤条件“索引时间”起作用。但如果我在创建表时没有添加索引,或者,我添加了 Manipulations With Data Skipping Indices
特点如下:
ALTER TABLEE MyTable ADD INDEX index_time TimeStamp TYPE minmax GRANULARITY 1
那么索引“index\u time”就不起作用了。
我的数据库正在生产上运行,因此无法重新创建表。我得用第二种方法。有人能解释为什么它不起作用或者我用错了这个功能吗?
1条答案
按热度按时间cnjp1d6j1#
查询在alter table add index之后不使用索引的原因是该索引尚不存在。(!)
任何新数据都将被正确地索引,这就是为什么当您将索引放入create表时,索引可以工作的原因。clickhouse在加载数据时构建索引。如果您创建了表,运行altertableaddindex,并加载了数据,您将看到相同的行为。
当数据已经存在时,情况就不同了。ALTERTABLE更新表的元数据,但此时所有数据都已写入表中的部分。clickhouse不会自动重写部分以实现新索引。但是,您应该能够通过运行以下命令强制重写以包含索引:
查看github问题https://github.com/yandex/clickhouse/issues/6561 更多信息请参考瑞江。