2012-05-02 72 views
0

我有過4個表的查詢:時間,標籤,用戶和類別。 每個表有不超過400個記錄,但是這個查詢需要70ms。sqlite的,緩慢加入查詢throught 4個表

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

我該如何加快速度?

+0

而不是使用其中嘗試使用HAVING子句 –

+0

你對這些列的索引?你能展示一個執行計劃嗎? –

回答

0

指標是溶液!!

The following list gives guidelines in choosing columns to index

•您應該建立經常使用的 WHERE子句中的列的索引。
•您應該創建用於 經常參加表上的列的索引。
•您應該創建上經常使用的ORDER BY子句中的列 索引。
•您應該有幾個表中的值相同或唯一值 的列上創建索引 。
•你不應該建立在表上(僅使用幾個街區表 )索引,因爲全表掃描可能會比索引查詢速度更快 。
•如果可能,請選擇一個主鍵, 以最合適的順序排列行。
•如果只有一個級聯索引的列 在WHERE子句中,放置 經常使用該列先在CREATE INDEX語句。
•如果級聯指數超過一個 柱首先在CREATE INDEX語句經常使用在WHERE子句, 地方最有選擇性的列。