數據庫視圖是什麼,和表有什麼區別和聯繫

區別:
      1、視圖是已經編譯好的sql語句,而表不是。
      2、視圖沒有實際的物理記錄,而表有。
      3、表是內容,視圖是窗口。
      4、表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改。
      5、表是內模式,試圖是外模式。
      6、視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。
      7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。 
      8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。
      9、不能對視圖進行update或者insert into操作。
聯繫:
    視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關係。
總結:
視圖是一個子查詢,性能肯定會比直接查詢要低(儘管sql內部有優化),所以使用視圖時有一個必須要注意的,就是不要嵌套使用查詢。尤其是複雜查詢。

視圖有什麼用:

1、當一個查詢你需要頻頻的作爲子查詢使用時,視圖可以簡化代碼,直接調用而不是每次都去重複寫這個東西。
2、系統的數據庫管理員,需要給他人提供一張表的某兩列數據,而不希望他可以看到其他任何數據,這時可以建一個只有這兩列數據的視圖,然後把視圖公佈給他。

性能損失解決方案:

對視圖的查詢語句進行優化。
通常來說直接查詢和查詢視圖是沒有什麼區別的(sql 本身會進行優化),除非是視圖嵌套了視圖,或者子查詢很複雜要計算。
特別說明:
每次SELECT視圖的時候,視圖都會重新計算創建它的規則(sql算法),如果算法複雜,數據量大,就會比較慢,那樣每次就很慢了。
而且,表的索引對於視圖view來說是無效的,它是全表掃描的。

示例:

數據庫是oracle,使用的試圖工具是免費版Navicate。

定位到指定數據,點擊視圖,右邊展示所有當前數據庫的視圖,雙擊後打開視圖窗口,和表看起來並無區別:

Ctry+D 即可進入視圖的SQL語句進行查看,如下:

 

原著:https://blog.csdn.net/zengmingen/article/details/51004203

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章