Mysql資料庫中的主鍵與索引

2021-10-12 06:00:23 字數 2235 閱讀 6076

由於在工作中遇到了多個程序讀寫資料庫容易造成死鎖並且更新時的查詢資料特別慢這個問題,所以總結了一下關係型資料庫的主鍵和索引的知識。索引是一種加快海量資料查詢的技術。索引就像是小時候的新華字典,有了索引,你可以快速地找到自己想找的東西。mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。

索引分單列索引和組合索引。

單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,但這不是組合索引。組合索引,即乙個索引包含多個列。

建立索引時,你需要確保該索引是應用在 sql 查詢語句的條件(一般作為 where 子句的條件)。

實際上,索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。過多的使用索引將會造成濫用。

因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案。

建立索引會占用磁碟空間的索引檔案。

1)優點

a.加快資料檢索速度和表與表之間的連線;

b.可以顯著減少查詢中分組和排序的時間(使用分組和排序子句進行資料檢索時)。

2)缺點

a.佔物理空間。

b.需要動態維護,降低資料維護速度(update、delete、insert)。

一般索引:這是最基本的索引,它沒有任何限制。值可以重複,可以為空。

唯一索引:它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。

聚集索引類似於**簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。

但該索引可以包含多個列(組合索引),就像**簿按姓氏和名字進行組織一樣。

如果在表中未建立聚集索引,則無法保證這些行具有任何特定的順序。聚集索引…就像我們新華字典中的按拼音排序…即你查…"愛"字…可以在前面看到"癌"字…但不會看到"受"字…而非聚集索引…就是新華字典中的按部首…筆劃排序…

聚集索引相當於我們書本上前面的目錄的一樣,它可以方便快速的找到你想找的內容,而非聚集索引就相當於書最後幾頁的解釋,它是對書中某個語句或者是生詞的解釋,就像我們上學時候的地理說一樣,書後面都有各種地理名稱的英文解釋;

《資料庫原理》裡面的解釋:聚集索引的順序就是資料的物理儲存順序,而非聚集索引的順序和資料物理排列無關。因為資料在物理存放時只能有一種排列方式,所以乙個表只能有乙個聚集索引。

主要分為聚集索引和非聚集索引兩類。

什麼是聚集索引?

正文內容本身是一種按照一定規則排列的目錄稱為「聚集索引」,就如新華字典的正文本身。因為資料只能按照一種規則排序,所以一張表至多有乙個聚集索引,但可以有多個非聚集索引。

非聚集索引最常見的就是聯合索引,那什麼是聯合索引呢?

比如 index idx_test(col_a,col_b),這種包含多個欄位的索引就被稱為「聯合索引」。

何時使用聚集索引或非聚集索引,參照:

在mysql資料庫的 innodb儲存引擎中,主鍵索引就是聚集索引,所有資料都會按照主鍵索引進行組織;而在 myisam儲存引擎中,就沒有聚集索引了,因為myisam儲存引擎中的資料不是按索引順序進行儲存的。

表中經常有乙個列或列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵.(預設為聚集索引)聚集索引確定表中資料的物理順序。

主鍵:唯一標識記錄(常見的什麼什麼id),不允許重複,不允許為空。

主鍵預設建立唯一索引,所以建立表時,不能在同乙個欄位上建立兩個索引,如:deal_id已經是主鍵,不能再次執行:

create index table_fei on tmp_table(deal_id) 會報錯!

主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。

乙個表中可以有多個唯一性索引,但只能有乙個主鍵(圖中多個主鍵指復合主鍵)

主鍵列不允許空值,而唯一性索引列允許空值。

索引可以提高查詢的速度。

主鍵和索引都是鍵,不過主鍵是邏輯鍵,索引是物理鍵(也是表,存在物理磁碟),意思就是主鍵不實際存在,而索引實際存在在資料庫中。

資料表主鍵就相當於是一本書的頁碼

索引相當於書的目錄,有了目錄我們可以很快的知道這本書的基本內容和結構,資料索引也一樣,它可以加快資料表的查詢速度。

MySQL資料庫 索引 主鍵 自增長

對資料庫表的一列或者多列的值進行排序的一種結構 btree方式 索引示例 開啟執行時間檢測 show variables like pro set profiling 1 執行查詢語句 無索引 select name from student where name tom2000000 檢視執行時間...

資料庫 索引 主鍵 聯合索引

參考自 索引 通過key或index定義 可以極大地提高資料查詢速度,但是會降低插入刪除更新表的速度,因為在執行這些操作是,還要操作索引檔案用來維護,所以說索引不是建的越多越好而是要建在合理的字段,比如使用者表,可以建在手機號,郵箱號上。同時,索引可以覆蓋多個列,也就成了聯合索引。主鍵,在一張表中只...

資料庫中主鍵 外來鍵 索引

1 主鍵 若某乙個屬性組 注意是組 能唯一標識一條記錄,該屬性組就是乙個主鍵。主鍵不能重複,且只能有有乙個,也不允許為空。定義主鍵主要是為了維護關聯式資料庫的完整性。2 外來鍵 外來鍵用於與另一張表的關聯,是能確定另一張表記錄的字段。外來鍵是另乙個表的主鍵,可以重複,可以有多個,也可以是空值。定義外...