索引:資料結構指向資料
mysql官方對索引的定義為:索引(index)是幫助mysql高效獲取資料的資料結構。
提取句子主幹,就可以得到索引的本質:索引是一種資料結構。
索引:資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構就是索引
innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址
mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。
mysql的優化主要分為結構優化(scheme optimization)和查詢優化(query optimization)。
索引屬於結構優化
不建議建索引的情況(索引檔案本身要消耗儲存空間,同時索引會加重插入、刪除和修改記錄時的負擔,
另外,mysql在執行時也要消耗資源維護索引)
第一種情況是表記錄比較少
第二種選擇性較低(選擇性:不重複的索引值)
在使用innodb儲存引擎時,如果沒有特別的需要,請永遠使用乙個與業務無關的自增欄位作為主鍵。(最好設定自增的字段)
1.聚集索引不僅僅是一種單獨的索引型別,
而且是一種儲存資料的方式。
innodb引擎的聚集索引實際上在同樣的結構中儲存了b-tree索引和資料行。
表有聚集索引時,它的資料行實際上儲存在索引的葉子上。注意是儲存引擎來實現索引
主鍵 唯一鍵 外來鍵 索引
a:主鍵一定是唯一鍵,但唯一鍵不一定是主鍵
b:b表的乙個欄位是a表的主鍵,那麼b就是a的外來鍵 (b表的外來鍵,指向的就是 a表的主鍵)
主鍵:能夠唯一標識表中某一行的屬性或屬性組。
乙個表只能有乙個主鍵,但可以有多個候選索引。
主鍵常常與外來鍵構成參照完整性約束,防止出現資料不一致。
主鍵可以保證記錄的唯一和主鍵域非空,資料庫管理系統對於主鍵自動生成唯一索引,所以主鍵也是乙個特殊的索引。
外來鍵約束主要用來維護兩個表之間資料的一致性。
簡言之,表的外來鍵就是另一表的主鍵,外來鍵將兩表聯絡起來。
一般情況下,要刪除一張表中的主鍵必須首先要確保其它表中的沒有相同外來鍵
(即該表中的主鍵沒有乙個外來鍵和它相關聯)。
索引:是用來快速地尋找那些具有特定值的記錄。
主要是為了檢索的方便,是為了加快訪問速度, 按一定的規則建立的,一般起到排序作用。
所謂唯一性索引,這種索引和前面的「普通索引」基本相同,但有乙個區別:
索引列的所有值都只能出現一次,即必須唯一。
主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。
乙個表中可以有多個唯一性索引,但只能有乙個主鍵。
主鍵列不允許空值,而唯一性索引列允許空值。
主鍵可以被其他欄位作外來鍵引用,而索引不能作為外來鍵引用。
資料庫索引的設計原則
索引定義 是乙個單獨的,儲存在磁碟上的資料庫結構,其包含著對資料表裡所有記錄的引用指標.為了使索引的使用效率更高,在建立索引時,必須考慮在哪些欄位上建立索引和建立什麼型別的索引。那麼索引設計原則又是怎樣的?1 選擇唯一性索引 唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學生表...
資料庫設計經驗之 索引的設計
1 索引應該有足夠的區分度,對區分度不大的列 例如列舉型別字段 不應該做索引 這時候應該考慮加上諸如時間範圍這樣的限制條件對記錄進行篩選 對乙個表中最影響效能的列,可以考慮做聚簇索引。2 小表少建索引或不建索引,可以載入到記憶體中訪問。3 索引字段一般為差異性較大 長度較小的型別,在這些欄位上經常做...
MySQL資料庫索引的設計原則
為了使索引的使用效率更高,在建立索引時,必須考慮在哪些欄位上建立索引和建立什麼型別的索引。本小節將向讀者介紹一些索引的設計原則。1 選擇唯一性索引 唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學生表中學號是具有唯一性的字段。為該字段建立唯一性索引可以很快的確定某個學生的資訊。...