2011-04-18 64 views
1

我正在做一個大的數據庫,對於這個問題的緣故,讓我們說,SQL SELECT語句包含3個表:加快SQLite的

A.表「員工」包含字段:

ID = INTEGER主索引AUTOINCREMENT

其他的並不重要

B.表 「Job_Sites」 包含字段:

ID = INTEGER主索引AUTOINCREMENT

其他的並不重要

C.表 「工作日」 包含字段:

ID = INTEGER主索引AUTOINCREMENT

EMP_ID =是員工的外鍵(ID)

job_id =是Job_Sites的外鍵(ID)

datew = INTEGER一種代表實際工作日,由於1月1日午夜由以秒爲單位的Unix日期表示,1970年


在該數據庫中的最常見的操作是爲一個特定的僱員顯示工作日。我執行以下select語句:

SELECT * FROM工作日WHERE EMP_ID = '實際員工ID' 和JOB_ID = '實際招聘網站ID' 和datew> = D1和datew < D2

我需要指出的D1和D2分別計算在搜索月份的開始和下個月的月份。

其實我有兩個問題:

  1. 我應該設置任何領域,除了主索引的索引? (對不起,我似乎誤解了整個索引概念)

  2. 有什麼方法可以重寫Select語句來加速它。例如,其中的大多數檢查都會看到實際的員工ID和工作現場ID是否匹配。也許有辦法把它分開?

PS。忘了說,我在Windows C++應用程序中使用SQLite。

CREATE INDEX WorkdaysLookupIndex ON Workdays (emp_id, job_id, datew); 

有時候,你只需要創建索引並嘗試查詢:

回答

2

如果你經常使用上面的查詢,那麼你可以通過創建一個包含在查詢中列的多列索引獲得更好的性能看看更快。