- Clickhouse常用语法
插入
INSERT INTO users VALUES (1, 'Alice', now()), (2, 'Bob', now());
删除
与mysql不一致
ALTER TABLE users DELETE WHERE age > 30;
更新
与mysql不一致
ALTER TABLE users UPDATE name = 'Alice_New' WHERE id = 1;
查询
SELECT *from hfhq.odr_fee_detail ofd where str3 like '%2%'
- 优化参数
1.禁止使用 Nullable
官方已经指出 Nullable 类型几乎总是会拖累性能,因为存储 Nullable 列时需要创建一个额外的文件来存储 NULL 的标记,并且 Nullable 列无法被索引。因此除非极特殊情况,应直接使用字段默认值表示空,或者自行指定一个在业务中无意义的值(例如用-1 表示没有商品ID)。
https://clickhouse.com/docs/zh/sql-reference/data-types/nullable

2.启用 optimize_move_to_prewhere
启用内置优化规则提升执行效率:
optimize_move_to_prewhere(默认开启)
作用:自动将 WHERE 条件转换为 Prewhere,优先过滤数据再读取列,减少 I/O。
如果未开启,配置文件添加
<profiles>
<default>
<optimize_move_to_prewhere>1</optimize_move_to_prewhere>
</default>
</profiles>
查询是否启用:SELECT * FROM system.settings WHERE name = 'optimize_move_to_prewhere';
3.启用 optimize_functions_to_subcolumns
启用或禁用通过将某些函数转换为读取子列进行优化。这可以减少要读取的数据量。
https://clickhouse.com/docs/zh/operations/settings/settings#optimize_functions_to_subcolumns
/etc/clickhouse-server/users.xml
<profiles>
<default>
<optimize_functions_to_subcolumns>1</optimize_functions_to_subcolumns>
</default>
</profiles>
查询是否启用:SELECT * FROM system.settings WHERE name = 'optimize_functions_to_subcolumns';
4.关闭 服务器运行日志
/etc/clickhouse-server/config.xml
- <level>trace</level>
trace是最详细的日志级别,记录所有操作(包括低级别调试信息),会导致:日志量暴增,I/O 压力大,磁盘空间快速耗尽,查询性能下降(日志写入与查询争抢资源)
调整参数:调整为 warning,仅记录警告及以上信息
- <size>1000M</size> <count>10</count>
单个日志文件最大 1GB,保留 10 个文件 → 总日志量可达 10GB,可能占用过高磁盘空间
调整参数:<count>从 10降至 5,总日志量限制在5GB以内
可以去对应目录删除之前日志
/var/log/clickhouse-server/clickhouse-server.log
5.关闭查询日志
与mysql query_log一致,开启后会记录所有sql语句
/etc/clickhouse-server/users.xml
<profiles>
<default>
<log_queries>0</log_queries>
</default>
</profiles>
配置完可以把10天前记录的数据清掉
ALTER TABLE system.query_log DELETE WHERE event_time < now() - INTERVAL 10 DAY;