Performance

相同的事情(內部)將條件放在直接在視圖上的視圖上的查詢中嗎?

  • March 22, 2016

我無法通過對視圖的查詢來理解性能。鑑於這兩種情況,內部的查詢會相同嗎?

場景 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 上可用。

引用自:https://dba.stackexchange.com/questions/133002