Performance
相同的事情(內部)將條件放在直接在視圖上的視圖上的查詢中嗎?
我無法通過對視圖的查詢來理解性能。鑑於這兩種情況,內部的查詢會相同嗎?
場景 1
看法:
CREATE VIEW TEST.SIMPLEVIEW AS SELECT TABLE1.*, TABLE2.* FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.id = TABLE2.fk_id;
詢問:
SELECT * FROM SIMPLEVIEW WHERE status = 'P'; -- P in select
情景 2
看法:
CREATE VIEW TEST.SIMPLEVIEW AS SELECT TABLE1.*, TABLE2.* FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.id = TABLE2.fk_id WHERE TABLE1.status = 'P'; -- P in view definition
詢問:
SELECT * FROM SIMPLEVIEW;
題
內部的查詢會是一樣的嗎?無視地位條件是或不是永久的這一事實。
一般來說,簡單視圖與查詢相同,在後台視圖被擴展並作為普通查詢傳遞給查詢優化器。這種觀點是一種組織工具,而不是一種提高績效的工具。使用這些視圖來限制某些使用者可以直接訪問的數據(如果使用者直接訪問您的數據庫而不是通過儲存過程)或簡化對常見重複查詢的引用。
索引視圖是一種用於 MSSQL Server 實現的視圖,由於它們在基礎表數據的子集上擁有自己的唯一聚集索引,因此可能會對性能產生影響。這種視圖可以提高性能,因為聚集索引是數據的副本,在邏輯上與原始表分開,但這完全取決於索引視圖的建構方式。如果您看到對提高性能的視圖的引用,他們可能正在談論這些,並且據我所知,此選項僅在 MSSQL Server 上可用。