sqlite,通过4个表缓慢加入查询

时间:2012-05-02 11:45:02

标签: sqlite

我通过4个表查询:时间,标签,用户和类别。 每个表的记录不超过400条,但此查询需要70毫秒。

我需要它多次(400x),所以所有程序总共需要大约30秒。

SELECT COUNT(*) FROM times
INNER JOIN tags ON times.user_id = tags.tag_id
INNER JOIN users ON tags.user_nr = users.nr
INNER JOIN categories ON users.category_id = categories.id
WHERE (times.time_raw < "000560")
AND (times.time_raw != 0 )
AND (times.cell != 1 )
AND (categories.name="kategory_A")
AND (times.run_id="08")

如何让它更快?

1 个答案:

答案 0 :(得分:0)

索引是解决方案!!

The following list gives guidelines in choosing columns to index

  

•您应该在经常使用的列上创建索引   WHERE条款。
  •您应该在使用的列上创建索引   经常加入表格。
  •您应该在列上创建索引   在ORDER BY子句中经常使用的   •你应该创造   具有少量相同值或唯一值的列上的索引   在表中。
  •您不应在小表(表格)上创建索引   只使用几个块)因为全表扫描可能更快   而不是索引查询   •如果可能,请选择一个主键   以最合适的顺序对行进行排序   •如果只有一列   连接索引在WHERE子句中经常使用,放置   该列首先在CREATE INDEX语句中   •如果不止一个   连接索引中的列经常在WHERE子句中使用,   将最具选择性的列放在CREATE INDEX语句中。