代码之家  ›  专栏  ›  技术社区  ›  Avba

创建有效的sqlite索引以处理带有group by和许多group concat语句的语句

  •  0
  • Avba  · 技术社区  · 7 年前

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

    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分钟)。

    组id sku 柱。

    我的索引如下:

    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
    

    组ID数

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

    sqlite> select count(sku) from products; 
    8395475 
    
    0 回复  |  直到 7 年前
    推荐文章