標籤:
SQL Server視圖我們經常會用的到,下面就為您介紹使用SQL Server視圖的優缺點,希望可以對您SQL Server視圖有更多的瞭解。
在程式設計的時候必須先瞭解視圖的優缺點,這樣可以揚長避短,SQL Server視圖具有如下的一些優點:
● 簡單性。視圖不僅可以簡化使用者對資料的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使使用者不必為以後的操作每次都指定全部的條件。
● 安全性。通過視圖使用者只能查詢和修改他們所能見到的資料。資料庫中的其他資料則既看不見也取不到。資料庫授權命令可以使每個使用者對資料庫的檢索限制到特定的資料庫物件上,但不能授權到資料庫特定行和特定的列上。通過視圖,使用者可以被限制在資料的不同子集上。
● 邏輯資料獨立性。視圖可以使應用程式和資料庫表在一定程度上獨立。如果沒有視圖,應用一定是建立在表上的。有了視圖之後,程式可以建立在視圖之上,從而程式與資料庫表被視圖分割開來。
SQL Server視圖也存在一些缺點,主要如下。
● 效能:SQL Server必須把視圖的查詢轉化成對基本表的查詢,如果這個視圖是由一個複雜的多表查詢所定義,那麼,即使是視圖的一個簡單查詢,SQL Server也把它變成一個複雜的結合體,需要花費一定的時間。
● 修改限制:當使用者試圖修改視圖的某些行時,SQL Server必須把它轉化為對基本表的某些行的修改。對於簡單視圖來說,這是很方便的,但是,對於比較複雜的視圖,可能是不可修改的。
所以,在定義資料庫物件時,不能不加選擇地來定義SQL Server視圖,應該權衡視圖的優點和缺點,合理地定義視圖。
資料庫設計中,經常遇到一個決策:究竟是使用視圖,還是中間表? 考慮庫存管理的一個情境:最普通的單據是入庫和出庫單,庫管員需要看到當前的庫存。對庫存的處理,我們有兩個方案:一是使用視圖,所有的入庫減去所有的出庫,就是當前庫存;另外就是使用中間表,建立一個庫存表,記錄當前的庫存。 1、使用視圖的方案 入庫時,系統記錄入庫單據; 出庫時,系統查詢庫存視圖,判斷是否有充足的庫存可以出庫,然後記錄出庫單據; 可見,系統只需要記錄入庫和出庫單據,庫存的計算是由DBMS在查詢檢視時進行的; 2、使用庫存表的方案 入庫時,系統記錄入庫單據,同時增加相應的庫存; 出庫時,系統查詢庫存表,判斷是否有充足的庫存可以出庫,然後記錄出庫單據,減少相應的庫存; 可見,系統除了記錄入庫和出庫單據外,還需要更新庫存表的當前庫存數量; 3、方案的比較 對系統本身的設計和編碼來說,視圖方案易於實現,測試方便;庫存表方案則稍微複雜。從這點上看,視圖方案可以在原型階段大展身手。 使用者體驗到的效能方面,視圖方案的效能壓力在查詢庫存上,庫存表方案的效能壓力在業務處理上: 視圖方案:由於每次查詢庫存,DBMS都需 要掃描入庫和出庫單據,查詢時間長;還可能會對入庫和出庫單據加鎖,導致入庫和出庫處理延長,甚至失敗(尤其是查詢庫存視圖在一個事務中時);庫存視圖如 果和其它表或者視圖串連,構成複雜的SQL時,由於索引不能有效(或無法)使用,查詢速度會更慢; 庫存表方案:庫存表上可以建索引,查詢速度比視圖會快很多;在入庫和出庫時,更新庫存表的SQL會對出入庫處理的速度有一些影響,但是由於更新隻影響出入庫的SKU,與查詢庫存表並發時,加鎖時間非常短,影響會比較小。 4、結論 視圖方案適用情形:原型,資料量比較小; 庫存表方案適用情形:資料量比較大,針對庫存的分析較多;
使用SQL Server視圖的優缺點