创建有效的sqlite索引来处理具有group by和许多group_concat语句的语句

时间:2018-06-14 19:30:38

标签: sql sqlite group-by group-concat

我试图从sqlite数据库中提取统计信息。我基本上收集了每个列的所有可能变体和变体计数,而主键按group_id列分组(许多skus属于每个group_id)。

为清楚起见假设一个这样的表:

sku, group_id, column_a, column_b

查询(删节)如下所示:

SELECT 
    group_id, 
    count(sku),
    group_concat(distinct column_a),
    count(distinct column_a),
    group_concat(distinct column_b),
    count(distinct column_b),
FROM 
    my_table
GROUP BY 
    group_id
ORDER BY 
    count(sku) DESC;

我的表有800万行和20列。

目前此查询的未删节版本永远不会完成(至少运行20分钟)。

我已在group_idsku列添加了索引。

修改 我的索引是这样的:

CREATE INDEX index_group_id ON products(group_id);
CREATE INDEX index_sku ON products(sku);
CREATE INDEX index_group_id_sku ON products(group_id,sku);

查询计划

0|0|0|SCAN TABLE products USING INDEX index_group_id_sku

group_ids数量

sqlite> select count(distinct group_id) from products; 
6426446

skus数量(主键 - 行数)

sqlite> select count(sku) from products; 
8395475 

0 个答案:

没有答案