0

我通过 4 个表进行查询:时间、标签、用户和类别。每个表不超过 400 条记录,但是这个查询需要 70ms。

我需要它很多次(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")

我怎样才能让它更快?

4

1 回答 1

0

索引是解决方案!

以下列表提供了选择要索引的列的指南

• 您应该在 WHERE 子句中经常使用的列上创建索引。
• 您应该在经常用于连接表的列上创建索引。
• 您应该在 ORDER BY 子句中经常使用的列上创建索引。
• 您应该在表中很少有相同值或唯一值的列上创建索引。
• 不应在小表(仅使用几个块的表)上创建索引,因为全表扫描可能比索引查询更快。
• 如果可能,请选择以最合适的顺序对行进行排序的主键。
• 如果仅在 WHERE 子句中频繁使用连接索引的一列,则将该列放在 CREATE INDEX 语句中的首位。
• 如果在 WHERE 子句中频繁使用连接索引中的多个列,则将最具选择性的列放在 CREATE INDEX 语句的首位。

于 2012-05-02T13:52:12.030 回答