Java
Derby/SQL - 如何在左連接和檢索 varchar 列時提高性能
通過反複試驗,我發現如果我進行左連接,例如:
SELECT firsttable.id, secondtable.id, secondtable.varcharColumn FROM firsttable LEFT JOIN secondtable ON firsttable.id=secondtable.id
對於較大的表,性能很糟糕。***如果我將 secondtable.varcharColumn 作為結果集中的列刪除或更改類型,則性能大約要好一個數量級。***該列是 varchar 255,所以它不應該有太大的區別。如果我將列的類型更改為 integerColumn 或 dateColumn,我也會看到性能上的數量級差異。即使是幾個字元的 varchar 似乎也會導致同樣的性能下降。
請注意,WHERE 子句不是這裡的問題。我省略了它,因為無論是否包含 WHERE 子句,問題都是相同的。**該問題與列中的數據類型有關,而不是與返回的數據量有關。**我也可以使用 LIMIT 1000 並遇到同樣的問題。
索引列將無濟於事,因為該列不用於連接。如果有的話,它也不是 where 子句的一部分。
任何有關如何提高性能的建議將不勝感激!!
缺少 WHERE 子句或 ORDER BY 子句可能意味著您的查詢沒有使用索引(並且肯定會選擇表中的所有行)。
所以,我建議:
- 添加“WHERE”子句
- 添加“ORDER BY”子句
- 確保在兩個表上有適當的索引,用於 WHERE 和 ORDER BY 子句中的 id 和列。
- 查看查詢執行計劃以確保使用了您的索引。
檢查您的查詢計劃並查看包含的列是否正在使用索引。
當您使用
LEFT JOIN
它時(從結果方面)從哪個表開始很重要;所以,也檢查一下。創建索引
secondtable.varcharColumn
這是閱讀更多關於性能的連結:http: //db.apache.org/derby/docs/10.8/tuning/index.html