在sql server中怎么理解索引、視圖
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
1.索引
索引是一個(gè)單獨(dú)的,物理的數(shù)據(jù)庫(kù)結(jié)構(gòu),它是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)志這些值的數(shù)據(jù)頁(yè)的邏輯指針清單.索引是依賴于表建立的,它提供了數(shù)據(jù)庫(kù)中編排表中數(shù)據(jù)的內(nèi)部方法.一個(gè)表的存儲(chǔ)是由兩部分組成的,一部分是用來(lái)存放表 的數(shù)據(jù)頁(yè)面,另一部分存放索引頁(yè)面.索引就存放在索引頁(yè)面上. 從某種程度上,可以把數(shù)據(jù)庫(kù)看作一本書(shū),把索引看作書(shū)的目錄,通過(guò)目錄查找書(shū)中的信息,顯然較沒(méi)有目錄的書(shū)方便,快捷. 按照上面的解釋看書(shū)的目錄這個(gè)比喻: >>它實(shí)際存,占據(jù)了書(shū)的內(nèi)容,紙張 >>它指向?qū)嶋H存在的內(nèi)容。比如要找第一章,那么目錄后面的頁(yè)碼便為 我們提供了一個(gè)快捷的方法。當(dāng)然對(duì)數(shù)據(jù)庫(kù)來(lái)說(shuō),這些都是透明的我 們不能看到的。但的確提高了數(shù)據(jù)庫(kù)返回給我們查詢結(jié)果的效率。 另外,我們要將它與查詢常用到的order by區(qū)分開(kāi)。前幾天公司里新員工培訓(xùn)曾遇到有的同學(xué)j混淆了。 所謂order by只不過(guò)是將返回的結(jié)果按要求排好順序,方便我們的使用。它對(duì)所在的查詢語(yǔ)句返回給我們結(jié)果是效率或其它方面(除去我們對(duì)結(jié)果的應(yīng)用)是沒(méi)有任何用處的。 另外有一種唯一索引,也就是主鍵(簡(jiǎn)單理解就是一個(gè)表中,如果在某列上建立了唯一索引,則該列不可以有兩個(gè)一樣的記錄出現(xiàn)). 但唯一索引有時(shí)會(huì)使我們插入/修改數(shù)據(jù)效率降低---或說(shuō)就是降低了。只是數(shù)據(jù)量小時(shí)不明顯。因?yàn)槊看尾迦?修改都會(huì)檢查完所有記錄,看是否有該值存在。 >>>>就像要求每個(gè)身份證號(hào)只能一人使用,那么分配一個(gè)身份證號(hào)時(shí)就要檢查一下是否已經(jīng)有人在用這個(gè)身份證號(hào)(當(dāng)然我們現(xiàn)實(shí)中可能已經(jīng)排好了,我們用到哪個(gè),下一個(gè)會(huì)用哪個(gè)) 2.視圖 首先看一下一些標(biāo)準(zhǔn)的說(shuō)法 視圖是原始數(shù)據(jù)庫(kù)數(shù)據(jù)的一種變換,是查看表中數(shù)據(jù)的另外一種方式。可以將視圖看成是一個(gè)移動(dòng)的窗口,通過(guò)它可以看到感興趣的數(shù)據(jù)。 視圖是從一個(gè)或多個(gè)實(shí)際表中獲得的,這些表的數(shù)據(jù)存放在數(shù)據(jù)庫(kù)中。那些用于產(chǎn)生視圖的表叫做該視圖的基表。一個(gè)視圖也可以從另一個(gè)視圖中產(chǎn)生。 視圖的定義存在數(shù)據(jù)庫(kù)中,與此定義相關(guān)的數(shù)據(jù)并沒(méi)有再存一份于數(shù)據(jù)庫(kù)中。通過(guò)視圖看到的數(shù)據(jù)存放在基表中。 視圖看上去非常象數(shù)據(jù)庫(kù)的物理表,對(duì)它的操作同任何其它的表一樣。當(dāng)通過(guò)視圖修改數(shù)據(jù)時(shí),實(shí)際上是在改變基表中的數(shù)據(jù);相反地,基表數(shù)據(jù)的改變也會(huì)自動(dòng)反映在由基表產(chǎn)生的視圖中。由于邏輯上的原因,有些視圖可以修改對(duì)應(yīng)的基表,有些則不能(僅僅能查 >>>如果說(shuō)索引是為了效率,那么視圖是為了我們使用的方便。 >>>視圖實(shí)際存在,能像對(duì)表的應(yīng)用一樣操作(但有限制) >>>所謂視圖存在并不它的數(shù)據(jù)存在于視圖中,而中是定義存在。它的數(shù)據(jù)仍存放在原來(lái)數(shù)據(jù)表中。就像你的檔案有你的完整描述(假設(shè)這就是定義)雖然它能代表你,能在你上面反應(yīng)一些k事(如給你記過(guò)的處分)但你本身并不在這。你實(shí)際也許現(xiàn)在正在國(guó)外呢. >>> >>>如果把視圖比喻一下,就像你從指縫中只看你想看的人或東西。 比如你只想看你前面三個(gè)人的手里是不是有錢包,你從指縫里看到它們的手就是一個(gè)視圖。而對(duì)其它數(shù)據(jù)不關(guān)心。 >>>現(xiàn)用庫(kù)表來(lái)說(shuō)一下。學(xué)生表有許多描述學(xué)生的信息。成績(jī)表有許多課目的成績(jī)。你只想列出名字,學(xué)號(hào),課目,成績(jī)。那么你至少有兩種三種方法: 》》》1.再建一個(gè)表存這些數(shù)據(jù)。顯然這會(huì)占空間,而且你在更新那兩個(gè)表時(shí)也要更新這個(gè)表,很容易忘記。 》》》2.用查詢語(yǔ)句查出結(jié)果。但要每次操作(當(dāng)然可以寫存儲(chǔ)過(guò)程--但不能對(duì)結(jié)果再操作;;;也可以寫臨時(shí)表---但對(duì)它的操作也不方便) 》》》3.建視圖。把需要的數(shù)據(jù)的定義放到視圖中,以后查詢可以直接用這個(gè)視圖名,如同用表名一樣。 注意:前面講到并不是所有對(duì)視圖的操作都會(huì)完成對(duì)原表的操作。一個(gè)簡(jiǎn)單的例子,,視圖某一列(金額)由(單價(jià)*數(shù)量)獲得,更新視圖的金額這一列,如100改成200,則多出100,但數(shù)據(jù)庫(kù)并不知道如何把這100分給單價(jià)還是數(shù)量。 該文章在 2012/1/14 17:33:35 編輯過(guò)
|
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |