SQLite选择查询性能调优
我有以下查询,它只从一个表中获取数据.
编辑: >自动填充数据可以是text1或text2. SELECT DISTINCT text1 as Key,'text1' as Source,int1 as Count,1000 as int3 FROM mytable WHERE text1 = 'foo' UNION SELECT DISTINCT text2 as Key,'text2' as Source,int2 as Count,1000 as int3 FROM mytable WHERE text2 = 'foo' UNION SELECT text1 as Key,MAX(int3) as int3 FROM mytable WHERE text1 > 'foo' AND text1 < 'fop' AND Count < 4 GROUP BY Key UNION SELECT text2 as Key,MAX(int3) as int3 FROM mytable WHERE text2 > 'foo' AND text2 < 'fop' AND Count < 4 GROUP BY Key ORDER BY int3 DESC,Count,Key LIMIT 0,15; 表结构是: CREATE TABLE mytable (text1 TEXT,text2 TEXT,int1 NUMERIC,int2 NUMERIC,int3 NUMERIC); 它工作正常,但我需要微调性能.我尝试了不同的索引选项,并使用内置计时器检查了性能结果. 我发现的最好的索引选项是: CREATE INDEX cmp1 ON mytable (text1 ASC,int1 ASC,int3 DESC); CREATE INDEX cmp2 ON mytable (text2 ASC,int2 ASC,int3 DESC); 如果你能告诉我任何更好的索引选项或更好的SQL查询,我将很高兴. UNION删除出现在两个子查询中的重复行,因此必须为结果创建临时表.如果可以保证子查询是不同的,或者如果您不关心这些重复项,请改用UNION ALL. (在您的情况下,按非索引值int3排序需要一个临时表.) 要优化子查询,请使用 如果确保正确声明索引,则可以使用LIKE;见 有关如何构造索引的说明,请参阅Query Planning.您的两个索引似乎是最佳的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |