视图和表的区别和联系
區(qū)別:
? ? ? 1、視圖是已經(jīng)編譯好的sql語句。而表不是 ??
? ? ? 2、視圖沒有實(shí)際的物理記錄。而表有。? ? ? 3、表是內(nèi)容,視圖是窗口
? ? ? 4、表只用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在,表可以及時(shí)四對(duì)它進(jìn)行修改,但視圖只能有創(chuàng)建的語句來修改
? ? ? 5、表是內(nèi)模式,試圖是外模式
? ? ? 6、視圖是查看數(shù)據(jù)表的一種方法,可以查詢數(shù)據(jù)表中某些字段構(gòu)成的數(shù)據(jù),只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數(shù)據(jù)表,從而不知道表結(jié)構(gòu)。
? ? ? 7、表屬于全局模式中的表,是實(shí)表;視圖屬于局部模式的表,是虛表。?
? ? ? 8、視圖的建立和刪除只影響視圖本身,不影響對(duì)應(yīng)的基本表。
? ? ? 9、不能對(duì)視圖進(jìn)行update或者insert into操作。
聯(lián)系:
視圖(view)是在基本表之上建立的表,它的結(jié)構(gòu)(即所定義的列)和內(nèi)容(即所有數(shù)據(jù)行)都來自基本表,它依據(jù)基本表存在而存在。一個(gè)視圖可以對(duì)應(yīng)一個(gè)基本表,也可以對(duì)應(yīng)多個(gè)基本表。視圖是基本表的抽象和在邏輯意義上建立的新關(guān)系。
總而言之:
簡(jiǎn)單說就是,視圖是一個(gè)子查詢,性能肯定會(huì)比直接查詢要低(盡管sql內(nèi)部有優(yōu)化),所以使用視圖時(shí)有一個(gè)必須要注意的,就是不要嵌套使用查詢。尤其是復(fù)雜查詢。
那要視圖有什么用?
1、當(dāng)一個(gè)查詢你需要頻頻的作為子查詢使用時(shí),視圖可以簡(jiǎn)化代碼,直接調(diào)用而不是每次都去重復(fù)寫這個(gè)東西,有點(diǎn)高級(jí)語言中的封裝的意思吧。
2、其實(shí)視圖還有很多其他的用處,比如說你是一個(gè)系統(tǒng)的數(shù)據(jù)庫(kù)管理員,你需要給他人提供一張表的某兩列數(shù)據(jù),而不希望他可以看到其他任何數(shù)據(jù),這樣你就可以給他建一個(gè)只有這兩列數(shù)據(jù)的視圖,然后把視圖公布給他。
常用視圖的場(chǎng)合應(yīng)該就上述兩處了,至少我經(jīng)常在這兩種情況下使用視圖,其他地方用視圖的還真不多。
追問:
沒有解決方案嗎
追答:
什么解決方案?性能損失方面的解決方案?
如果是性能損失方面的解決方案,沒有。
也可以說有,就是對(duì)視圖的查詢語句進(jìn)行優(yōu)化。
通常來說直接查詢和查詢視圖是沒有什么區(qū)別的(sql 本身會(huì)進(jìn)行優(yōu)化),除非是視圖嵌套了視圖,或者子查詢很復(fù)雜要計(jì)算。
特別說明:
每次SELECT 視圖 ?的時(shí)候,視圖都會(huì)重新計(jì)算創(chuàng)建它的規(guī)則(sql算法),如果算法復(fù)雜,數(shù)據(jù)量大,就會(huì)比較慢,那樣每次就很慢了。
而且,表的索引對(duì)于視圖view來說是無效的,它是全表掃描的。
總結(jié)
以上是生活随笔為你收集整理的视图和表的区别和联系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个“老”程序员的思考
- 下一篇: Android 通过WIFI状态监听广播