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

sqlite连接优化

  •  6
  • gmn  · 技术社区  · 15 年前

    如果您有如下查询:

    select a.Name, a.Description from a
    inner join b on a.id1 = b.id1
    inner join c on b.id2 = c.id2
    group by a.Name, a.Description
    

    如果您认为每个表中有超过100000行,那么在sqlite中为该查询编制索引的最佳列是什么?

    我之所以问这个问题,是因为当我应用相同的优化时,我没有从另一个RDBMS(SQL Server)得到与group by相同的查询性能。

    我是否认为在sqlite中查询中单个表上引用的所有列都需要包含在单个复合索引中才能获得最佳性能?

    5 回复  |  直到 14 年前
        1
  •  5
  •   Donnie    15 年前

    selects

        3
  •  1
  •   musiKk    15 年前

    a.id1 b.id1 b.id2 c.id2 (b.id1, b.id2) (a.id1, a.Name, a.Description)

        4
  •  1
  •   MPelletier    14 年前

    SELECT DISTINCT a.Name, a.Description
    FROM a, b, c
    WHERE a.id1 = b.id1
    AND b.id2 = c.id2
    

    a b c a.Name a.Description

    SELECT DISTINCT a.Name, a.Description
    FROM a
    WHERE a.id1 IN (
     SELECT b.id1
     FROM b
     WHERE b.id2 IN (
      SELECT c.id2
      FROM c
      )
     )
    

    SELECT a.Name, a.Description
    FROM a 
    WHERE a.id1 IN (
     SELECT DISTINCT a.id1
     FROM a
     WHERE a.id1 IN (
      SELECT b.id1
      FROM b
      WHERE b.id2 IN (
       SELECT c.id2
       FROM c
       )
      )
     )
    
        5
  •  0
  •   Larry Lustig    15 年前