一、關系型數據庫中的字段默認值、不可為空、少數索引約束的優缺點
1.字段默認值:針對每個字段都有自己的默認值,較有利于進行統計和分析,以及方便程序邏輯操作;
2.不可為空:若是該字段創建為索引情況下,且允許為NULL,則存儲多個值,若是不允許為空,可能用某一個值替代,則索引值更少,以及部分數據庫產品不支持字段為NULL情況下創建索引(特別是早期的數據庫產品)。
3.少數性約束:那是指有數據少數性要求的情況下,可以借助數據庫的方式判斷是否存在重復值,而避免程序去判斷,減少事務的處理等。
六大約束:
not null 非空 :用于保障該字段的值不能為空, 比如姓名、學號等
Default 默認: 用于保證該字段有默認值,比如性別、
PRIMARY KEY 主鍵: 用于保證該字段的值有少數性,并且 非空。是能夠少數的標識一組數據的數據元素;比如說:學號,姓名,年齡,性別,課程號課程中學號是少數的
UNIQUE 少數約束: 用于保障該字段的值有少數性,可以為空, 比如座位號
Check 檢查約束:mysql中不支持,但不報錯
Foreign KEY 外鍵:用于限制兩個標的關系 用于保證該字段的值必須來自于主表關聯的值。 一組數據的主鍵是另一組數據的的元素;主鍵約束了外鍵所在表中不能存在主鍵類之外的值;外鍵用于與另一張表的關聯。比如:學生表的專業編號、員工表的部門編號。
延伸閱讀:
二、索引維護
B+樹為了維護索引有序性,在插入新值的時候需要做必要的維護。以上面這個圖為例,如果插入新的行ID值為700,則只需要在R5的記錄后面插入一個新記錄。如果新插入的ID值為400,就相對麻煩了,需要邏輯上挪動后面的數據,空出位置。
而更糟的情況是,如果R5所在的數據頁已經滿了,根據B+樹的算法,這時候需要申請一個新的數據頁,然后挪動部分數據過去。這個過程稱為頁分裂。在這種情況下,性能自然會受影響。
除了性能外,頁分裂操作還影響數據頁的利用率。原本放在一個頁的數據,現在分到兩個頁中,整體空間利用率降低大約50%。
當然有分裂就有合并。當相鄰兩個頁由于刪除了數據,利用率很低之后,會將數據頁做合并。合并的過程,可以認為是分裂過程的逆過程。