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