如何使用索引优化sql查询

时间:2012-09-15 17:31:55

标签: sql sqlite

我有这个复杂的查询,我需要优化它。 没有索引需要20毫秒,我想添加一些索引,它更好,现在我有4毫秒。 但我没有任何经验。你能帮助我加快速度吗?

 SELECT COUNT(*) FROM(
   SELECT user_id FROM times 
      INNER JOIN tags ON times.user_id = tags.tag_id 
      INNER JOIN users ON tags.user_nr = users.nr  
      WHERE (times.time < 1597313) 
        AND (times.run_id="118") 
        AND (times.user_id != 109330258) 
        AND (times.user_id != 0) 
        AND (times.time != 0 ) 
        AND (times.cell != 1 ) 
        AND (users.category_id="4") 
        GROUP BY user_id HAVING count(*) == 1 
   UNION  
   SELECT user_id FROM times 
   INNER JOIN tags ON times.user_id = tags.tag_id 
   INNER JOIN users ON tags.user_nr = users.nr  
   WHERE (times.run_id="118") 
     AND (times.user_id != 109330258) 
     AND (times.user_id != 0 ) 
     AND (times.time != 0 ) AND (times.cell != 1 ) 
     AND (users.category_id="4") 
     GROUP BY user_id HAVING count(*) > 1
   )

我添加了3个索引。

  • 表格标签 - tagid
  • 表时间 - user_id
  • 表用户 - nr

2 个答案:

答案 0 :(得分:0)

您还应该尝试索引tags.user_nr,但如果没有查看查询计划,就无法给出明确的答案。

答案 1 :(得分:0)

如果你在谈论MySQL here in Stack Exchange on the database administrator site,你有一个类似的问题,不完全一样,但是OP正在尝试优化像你这样的大查询的性能。请注意第二个答案,它提供了有关热点的有用提示,以便调整您的查询。