You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Manticore已有Plain Index创建新的Plain Index?

更优的Manticore索引间聚合方案

好问题!你现在用localhost绕查的方法确实可行,但Manticore其实提供了原生的索引内直接查询聚合的能力,完全不需要走外部MySQL协议转发,性能和简洁度都更好。下面给你两种核心方案:

1. 用CREATE TABLE ... AS SELECT直接从已有索引构建分组索引

这是最直接的方式,Manticore支持类似SQL的CTAS(Create Table As Select)语法,可以直接从已有的idx_phone_calls索引读取数据,同时完成分组聚合,一步生成目标索引idx_phone_calls_by_date。

举个贴合你场景的例子:

CREATE TABLE idx_phone_calls_by_date (
    date Date,
    agent_id Int,
    call_count Int,
    total_duration Float
) ENGINE = Plain
AS SELECT
    toDate(call_timestamp) AS date,  -- 用第一个索引里已经规范化好的timestamp字段转日期
    agent_id,
    count(*) AS call_count,          -- 统计每日通话量
    sum(duration) AS total_duration  -- 统计每日总通话时长
FROM idx_phone_calls
GROUP BY date, agent_id;

这个方法的优势:

  • 完全复用第一个索引已经完成的所有规范化操作(datetime转timestamp、字段拼接等),不需要重复处理原始MySQL数据
  • 是Manticore内部的数据流转,比通过localhost走MySQL协议的方式性能高很多
  • 语法简洁,一步到位生成目标索引

2. 定期增量更新分组索引(适合第一个索引频繁更新的场景)

如果你的idx_phone_calls是定期更新的(比如每天导入新的通话数据),不需要每次都全量重建idx_phone_calls_by_date,可以用增量聚合的方式:

步骤1:先做一次全量初始化(和上面的CTAS一样)

步骤2:每天增量插入新数据

INSERT INTO idx_phone_calls_by_date
SELECT
    toDate(call_timestamp) AS date,
    agent_id,
    count(*) AS call_count,
    sum(duration) AS total_duration
FROM idx_phone_calls
WHERE call_timestamp >= '2024-05-20 00:00:00'  -- 只取当天新增的通话数据
GROUP BY date, agent_id;

如果需要更灵活的更新,还可以把idx_phone_calls_by_date改成Real-Time引擎(把ENGINE = Plain换成ENGINE = RT),这样插入操作会更高效,不需要每次重建整个索引。

对比你当前的方法

你现在把Manticore自身作为MySQL数据源的方式是可行的,但缺点很明显:

  • 需要通过MySQL协议做一层转发,性能不如原生的内部查询
  • 额外需要配置Manticore的MySQL协议端口并确保可访问
  • 语法上多了一层数据源配置,不如CTAS简洁

内容的提问来源于stack exchange,提问作者fistameeny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:57:44