毫無疑問,編寫SELECT * FROM viewCostumerAddress
比SELECT c.id,c.name,a.id,a.fullAddress FROM customer c JOIN address a on a.id_costumer=c.id ORDER BY a.id,c.Priority
更簡單直觀,但是當一羣人告訴你「視圖的性能更好」並且你的測試沒有顯示出獲得你的所作所爲?
我所進行的所有測試都使用相同的SQL Server 2014.該數據集包含大約2kk客戶端和2.5kk地址。在任何情況下,服務器的內存消耗都超過了60%。冷查詢測試總是伴隨着一個完整的服務重啓,以「強制清理」任何預編譯查詢和任何緩存信息。熱查詢的結果僅在每個查詢/查看命中200次後才被記錄,並儘可能多地過濾不同的值。所有測試均在專用的非虛擬服務器上進行1000次(裸機)。
然而,最終結果的熱點查詢變化小於1%(0.971%),冷查詢(0.0024%)變化小於0。面對這些結果,我開始懷疑在現代RDBMS世界和「對象 - 關係映射器」中,性能增益的舊聲明是否仍然有正當理由從視圖而不是直接查詢數據的數據? PS:請儘量在您的答案中儘可能科學,提供測試方法(如果是案件)和/或科學論文,或者在舉報您目擊事件的情況下具體和徹底。視圖性能增益仍然與現代RDBMS相關
2
A
回答
3
如果您有一個不是索引視圖的普通視圖,則沒有性能增益。這是因爲,當您從視圖中選擇時,SQL-Server運行T-SQL-Statement,就像它沒有視圖一樣。
這些都是我的一些想法的看法:
1意見是安全層
我個人不希望任何人去我的基表直接訪問。 在視圖中,我可以根據調用者的權限篩選出行。 直到SQL Server 2014,你不能用表來做到這一點。
2.視圖返回特定的一組列
的如果我不得不改變底層表的模式,我可以改變的方式的觀點,它返回相同的列之前。如果您不使用視圖並且用戶自己從基表中進行選擇,則查詢可能會失敗。
3.視圖是節省開發時間
您不必一遍又一遍地寫相同的T-SQL語句。那麼如果T-SQL語句中有錯誤呢?只需將它固定在一個地方,在視圖中。您可能不必更改應用程序或許多功能和存儲過程。
4.使用索引視圖,當你看到你的INNER JOIN的觀點是過於昂貴,有沒有更多的其他選項(如有用的索引或架構的變化),加快SELECT查詢
可以使用索引視圖來加速SELECT。但是,對於INSERT,UPDATE和DELETE,性能可能會下降,因爲視圖的索引也必須更新。
相關問題
- 1. 性能增益屬性
- 2. C++/CLI性能增益
- 3. 性能增益實現concatMap與foldl'爲有限列表?
- 4. Docker羣發現仍然相關?
- 5. 虛擬化仍然與Docker相關嗎?
- 6. pecl是否仍然與php相關
- 7. 模板緩衝區在現代OpenGL中仍然相關嗎?
- 8. RDBMS規範化與性能
- 9. TestActorRef死鎖的可能性仍然相關嗎?
- 10. Drupal空視圖仍然呈現
- 11. @import url(addonstyles.css)仍然相關?
- 12. SSI是否仍然相關?
- 13. eAccelerator是否仍然相關?
- 14. 控制器和視圖相關聯並self.method仍然混淆我
- 15. 現在連接池與JDBC仍然在提高性能嗎?
- 16. 從視圖中刪除代碼仍然呈現jqGrid
- 17. Java RDBMS性能
- 18. Ghostdriver的實際性能增益
- 19. 投影查詢,性能增益
- 20. 邊際的性能增益:: parallel_for時()
- 21. CSS顯示性能增益:無或$ .remove()?
- 22. 分片EC2 EBS卷收益性能增益?
- 23. Valgrind與Linux性能相關
- 24. presentModalViewController和仍然視圖UITabbarcontroller
- 25. 表視圖仍然空白?
- 26. H2o模型性能指標和增益圖表定製
- 27. 使用多處理來處理圖像,但沒有性能增益與8 cpus
- 28. 增加與性能直接相關的CPU核心?
- 29. Datanucleus JPA和JDO實現與RDBMS之間的性能差異?
- 30. 我的方法在現代PHP編程中是否仍然相關?
我從來沒有人向我提倡使用非物化視圖來提高性能。底層DDL的絕緣性肯定會改變,但絕不會影響性能。 –
唯一的性能優勢是隻需鍵入視圖名稱的開發人員。實際的視圖是相同的查詢,所以根本不會從性能角度獲益。如果牛羣中的任何人有任何文件來支持該聲明,我會感興趣。 –
如果您想討論查詢的性能(有或沒有視圖),請爲表和視圖提供查詢,其EXPLAIN和SHOW CREATE。 –