1. 程式人生 > 其它 >C# 委託與事件的複習

C# 委託與事件的複習

索引

1、索引:一種用於快速查詢和檢索資料的資料結構 B樹、B+樹、Hash

2、優缺點:

=(1)優點:可以大大加快資料的檢索速度、建立唯一性索引可以保證資料庫表中每行資料的唯一性;一般情況下,索引查詢比全表查詢要快的

=(2)缺點:建立和維護索引需要消耗時間,對有索引的資料進行增刪改時,索引需要動態修改,會降低sql執行效率;索引需要使用物理檔案儲存,會消耗一定的空間

3、索引底層資料結構

=(1)Hash表:K-V鍵值對、雜湊演算法、雜湊衝突(鏈地址法)

           MySQL沒有使用的原因:Hash衝突問題;Hash索引不支援順序和範圍查詢(只能用於精準定位)

=(2)B樹:多路平衡查詢樹

           B樹的所有節點集存放鍵key也存放資料data

           葉子節點是獨立的

檢索過程相當於對每個節點關鍵字做二分查詢,不穩定

=(3)B+樹:B樹的變體

           B+樹只有葉子節點存放key和data,其它節點存放key

           B+樹葉子節點有一條鏈指向相鄰的葉子節點

           B+樹檢索穩定,從根節點號葉子節點的過程,葉子節點的順序檢 索明顯

=(4) InnoDB和MyISAM——索引的區別

==相同點:都是使用B+Tree 索引結構

==不同點:

               MyISAM:B+Tree葉子節點的data域 存放的是 資料記錄的地址

                   檢索時,先按照B+Tree搜尋索引,指定的key存在,取出data的值,根據data值即地址,讀取相應的資料記錄 (“非聚簇索引”)

              InnoDB:資料檔案本身就是索引檔案

                   B+樹的葉子節點的data域儲存了完整的資料記錄

                   檢索時,搜尋索引,指定的key存在,key時資料表的主鍵,innodb表資料檔案本身就是索引檔案。(聚簇索引),其餘的索引作為輔助索引,輔助索引的data域儲存相應記錄主鍵的值。

                   在根據主索引搜尋時,找到key所在的葉子節點可以取出資料;在根據輔助索引搜尋時,則需要先取出主鍵的值,再走一遍主索引。

4、索引型別

=(1)主鍵索引:資料表的主鍵列使用的就是主鍵索引

            InnoDB表中,沒有顯示指定表的主鍵時,會自動先檢查表中是否有唯一索引且不允許存在null值的欄位

            有則選擇該欄位為預設的主鍵,沒有就欄位建立一個6byte的自增主鍵。

=(2)二級索引(輔助索引):葉子節點儲存的資料是主鍵

              通過二級索引,可以定位主鍵的位置。

              唯一索引、普通索引、字首索引等屬於二級索引

     唯一索引(unique key):屬性列不能出現重複的資料,可以為null,一張表允許建立多個唯一索引

     普通索引(index):為了快速查詢資料,一張表允許建立多個普通索引,允許資料重複和null

     字首索引(prefix):只適用於字串型別的資料,對文字的前幾個字元建立索引

     全文索引(full text):為了檢索大文字資料中的關鍵字的資訊

5、聚簇索引和非聚簇索引

=(1)聚簇索引:索引結構和資料一起存放的索引 主鍵索引

           B+樹非葉子節點儲存索引,葉子節點儲存索引和資料

              優點:查詢速度快,葉子節點有序

              缺點:依賴於有序的資料,更新代價大

=(2)非聚簇索引:索引結構和資料分開存放的索引 二級索引

           非聚簇索引的葉子節點不一定存放資料的指標,可能存放主鍵,再根據主鍵回表查詢資料

              優點:更新代價比聚簇索引小,因為葉子節點不存放資料

              缺點:依賴於有序的資料;可能會二次查詢(回表)

=(3)覆蓋索引:索引包含所有需要查詢的欄位的值

            非聚簇索引不一定會回表查詢

            需要查詢的欄位正好是索引的欄位,可以直接根據該索引查到資料,無需回表查詢

6、適合建立索引的條件

=(1)不為null的欄位:null欄位難優化,建議使用0,1,true,false

=(2)被頻繁查詢的欄位

=(3)被作為條件查詢的欄位:被作為where條件查詢的欄位

=(4)頻繁需要排序的欄位:索引已經排序,可以利用索引的排序,加快排序查詢的時間

=(5)被經常頻繁用於連線的欄位:可能是一些外來鍵列,外來鍵列不一定要建立外來鍵,該列涉及到表和表的關係,頻繁被連線查詢的欄位,可以建立索引

=(6)多考慮建立聯合索引:建立索引要佔用磁碟空間,每個索引對應一顆B+樹,聯合索引中多個欄位在一個索引上,可以節約磁碟空間,修改資料操作效率也會提升

7、為表字段新增索引的語句

=(1)新增主鍵索引primary key

alter table table_name ADD PRIMARY KEY(column)

=(2)新增唯一索引unique

alter table table_name ADD UNIQUE(column)

=(3)新增普通索引index

alter table table_name ADD INDEX Index_name(column)

=(4)新增全文索引fulltext

alter table table_name ADD FULLTEXT(column)

=(5)新增多列索引

alter table table_name ADD INDEX index_name(column1、column2、column3)