前置要求:我需要在一个超过 40K 的查询中找到所有匹配的结果。
要求:两个表 - product 和 product_category。我正在尝试从 product_category 表中获取所有具有匹配类别的产品。
表结构:
CREATE TABLE catalog.product (
product_id string PRIMARY KEY index using plain,
name string,
sku string,
) clustered by (product_id) into 4 shards;
create table catalog.product_category (
category_id string primary key index using plain,
product_id string primary key index using plain,
INDEX product_category_index using plain(product_id, category_id)
active boolean,
parent_category_id integer,
updated_at timestamp
);
加盟查询:
select p.product_id from catalog.product_category pc join catalog.product p on p.product_id=pc.product_id limit 40000;
尝试了多种方法 - 索引 product_id(作为整数和字符串)等。
结果:要显示 35K 结果,每次需要超过 90 秒。
问题:如何优化查询响应时间?
其他一些信息: - CPU 核心 -4 - 尝试使用一个或多个节点 - 默认分片 - 产品总数 - 35K 和 product_category 只有 35K 条目。
用例:我正在尝试将 crateDB 用作持久缓存,但在给定的查询响应时间下,我们无法真正做到这一点。所以我们将转移到一些内存数据库,如 REDIS 或 Memcache。选择 crateDB 的原因是对持久数据的查询能力。