2015-11-02 33 views
0

可以說我有一個數據庫中的兩個表:sqlite的:避免全表掃描,而查詢一對多DATABSE

user: 
--------------- 
| name | id | 
|-------|-----| 
| foo | 1 | 
| bar | 2 | 
--------------- 

comments: 
------------------ 
| comment | id | 
|-----------------| 
| comment 1 | 1 | 
| comment 2 | 1 | 
| comment 3 | 1 | 
| comment 4 | 1 | 
| comment 5 | 1 | 
| comment 1 | 2 | 
------------------ 

讓我們說,我想拉起通過foo提出的所有意見,所以我的查詢將被

SELECT c.comment from comments c, user u WHERE u.name='foo' and c.id = u.id

將上述查詢做一個全表掃描的意見表獲得評論用戶foo作出或是否有更好的查詢優化這個,避免全表查詢?我應該爲這些表創建索引嗎?

+0

儘量避免用逗號分隔連接! –

+0

爲什麼你認爲SQLite正在進行全表查找?你檢查執行計劃嗎?儘管使用顯式的'JOIN'運算符不會(或不應該)改變性能,但它比使用'where'子句中的過時隱式連接更好的編碼風格 –

+0

閱讀[documentation](http: /www.sqlite.org/eqp.html)。 –

回答

0

爲了優化您的查詢速度,您必須在表格註釋中添加註釋/標識索引。

但它取決於數據量或未來時間內預計的數量。有時你永遠不會需要一張永遠不會增長的小表中的索引。 您可以考慮表格的使用和演變。

因此,「我應該創建...」:這取決於!