我不擅長SQL,所以我請你們幫忙寫一個查詢。
SQL Query - Table Joining Problems
我得到了一個答案,它的工作原理!它顯然很慢。我討厭這樣做,但我真的希望有人在那裏想推薦一些方法來優化查詢。我甚至沒有嘗試過,因爲我對SQL甚至沒有足夠的瞭解,甚至不會開始使用Google。SQL查詢 - 性能優化
0
A
回答
2
什麼可能會幫助您在要加入的列上創建索引。例如;
CREATE INDEX name_for_index ON Main (StatusID);
它爲執行查詢的算法將使用的該列生成查找表。
編輯:如果你不允許更改數據庫,你可能會運氣不好。我已經看到了JOIN語句的緩解提高了性能的情況,那就是這樣;
...
FROM
Main m, Status st, Secondary s
WHERE
st.ID = m.StatusID
AND s.MainID = m.ID
AND
(s.MainID IS NULL AND m.WhenDate = <YourDate>
OR
s.MainID IS NOT NULL AND s.WhenDate = <YourDate>)
AND TypeId = <TypeFilter>
AND ... other filters, if you need any ...
然後處理您的其他案例,其中INNER JOIN
需要更詳細一點。
0
有時候這樣的一個技巧可能會工作一點,但正如你所看到的,它主要使你的查詢複雜化。但正如我在評論中所說的那樣:我真的強烈要求你的DBA添加適當的索引,甚至可以教你如何確定你需要的索引並給你添加它們的權利。
我見過WHERE
子句中的OR
通過使用兩個單獨的幾乎相似的選擇來解決,這些選擇由USING ALL
組合。但我相信這個技巧主要用於Oracle,主要用於具有合適索引的表。值得一試,但。
SELECT
x.*
FROM
(SELECT
m.ID as MainID,
m.WhenDate as MainWhenDate,
m.InfoText,
m.StatusID,
st.StatusText,
m.TypeID,
NULL AS SecondaryWhenDate,
m.WhenDate AS ActualWhenDate
FROM
Main m
INNER JOIN Status st ON st.ID = m.StatusID
LEFT JOIN Secondary s ON s.MainID = m.ID
WHERE
s.MainID IS NULL AND
m.WhenDate = <YourDate>
UNION ALL
SELECT
m.ID as MainID,
m.WhenDate as MainWhenDate,
m.InfoText,
m.StatusID,
st.StatusText,
m.TypeID,
s.WhenDate AS SecondaryWhenDate,
s.WhenDate AS ActualWhenDate
FROM
Main m
INNER JOIN Status st ON st.ID = m.StatusID
INNER JOIN Secondary s ON s.MainID = m.ID
WHERE
s.WhenDate = <YourDate>) x
WHERE
x.TypeId = <TypeFilter>
AND ... other filters, if you need any ...
相關問題
- 1. 優化SQL查詢性能
- 2. SQL查詢性能優化(TimesTen)
- 3. SQL Server 2008 R2:優化查詢性能
- 4. MySQL查詢優化性能
- 5. 查詢性能優化
- 6. 優化查詢性能,MySQL
- 7. SQL Azure的查詢性能 - 。真慢甚至優化的查詢
- 8. 優化SQL查詢
- 9. SQL優化查詢
- 10. SQL - 查詢優化
- 11. 優化SQL查詢
- 12. 優化SQL查詢?
- 13. 優化sql查詢
- 14. SQL查詢優化
- 15. SQL查詢優化
- 16. 優化SQL查詢
- 17. SQL查詢優化
- 18. Sql查詢優化
- 19. 查詢優化SQL
- 20. 優化SQL查詢
- 21. SQL查詢優化
- 22. SQL查詢優化
- 23. SQL查詢優化
- 24. 優化SQL查詢
- 25. SQL查詢優化
- 26. 優化SQL查詢
- 27. 優化SQL查詢
- 28. SQL查詢優化
- 29. 優化SQL查詢
- 30. 優化SQL查詢
我應該提到它,但它會走神的行爲讓我對數據庫作任何修改..希望有更改查詢並獲得更快的結果的方式... – Dorf
你可以做除了添加索引之外,還有一些優化,但不會產生太多結果,並且會使查詢變得更加複雜。我強烈建議你讓你的DBA看看並添加正確的索引。或者給你這樣做的權利。 – GolezTrol
我同意GolezTrol。 – Gijs