資料結構分,有b-tree索引(b+ tree)、雜湊索引、r-tree索引等。按資料塊的順序和索引節點的邏輯順序是否一致可以分為聚集索引和非聚集索引。聚集索引由於物理塊連續,在範圍掃瞄的時候可以減少磁頭尋道時間,因而比非聚集索引高效。
幾種索引型別的選擇:
primary:主鍵索引。
unique:唯一索引。不允許重複,可以為null。
normal:普通索引。
fulltext:只能對char, varchar和text列編制索引,並且只能在myisam表中編制。
spatial:只能對空間列編制索引,並且只能在myisam表中編制。
個人總結:
聚集索引中,"聚集"的意思是指實際的資料行和相關的鍵值都儲存在一起,但是每個表只能有乙個聚集索引,不能把一行資料儲存在兩個地方。
myisam
1、非聚集索引,所以即使建立主鍵,也是非聚集的。
2、b+tree,所有索引的葉節點是資料的實體地址。
3、不允許存在null值的唯一索引,與主鍵索引本質上一樣。
4、第二(其他)索引,
innodb
1、聚集索引(有且僅有乙個),如果有主鍵,主鍵就是聚集索引,若沒有切有唯一索引,第乙個唯一索引就是聚集索引,如果都沒有,則表自動生成乙個6位元組的聚集索引來做排序id。
2、b+tree,聚集索引的葉節點是完整資料,其他索引葉節點是聚集索引的鍵值。
3、不允許存在null值的唯一索引,查詢卻還是需要先找到資料的聚集索引唯一值,再去聚集索引中找對應資料。
索引的官方介紹:
mysql為表把它的資料詞典資訊以.frm檔案的形式存在資料庫目錄裡,這對所有mysql儲存引擎都是真的。但是每個innodb表在表空間內的innodb內部資料詞典裡有它自己的條目。當mysql移除表或資料庫,它不得不刪除.frm檔案和innodb資料詞典內的相應條目。這就是為什麼你不能在資料庫之間簡單地移動.frm檔案來移動innodb表。
每個innodb表有專門索引,被稱為clustered index,對行的資料被存於其中。如果你對你的表定義乙個primary key,主鍵的索引是集束索引。
如果你沒有為表定義primary key,mysql取第乙個不允許not null列的unique索引作為主鍵,並且innodb把它當作集束索引來用。如果表中沒有這樣乙個索引,innodb內部產生乙個集束索引,其中用innodb在這樣乙個表內指定給行的行id來排序行。行id是乙個6位元組的域,它在新行被插入的時候單一地增加。因此被行id排序的行是物理地按照插入順序排的。
通過集束索引訪問乙個行是較快的,因為行資料是在索引搜尋引導的同一頁面。如果表是巨大的,當對比於傳統解決方案,集束索引構架經常節約磁碟i/o。(在許多資料庫,資料傳統地被存在與索引記錄不同的頁)。
innodb比較char和varchar字串不同長度,以便在較短字串中剩下的長度被處理視為用空格補上的。
15.2.13.1. 索引的物理結構
所有innodb的索引是b數,其中索引記錄被儲存在樹的樹葉頁。乙個索引頁的預設大小是16kb。當新記錄被插入,innodb試著為將來索引記錄的插入和更新留下十六分之一的空白頁。
如果索引記錄以連續的順序被插入(公升序或者降序),結果索引頁大約是15/16滿。如果記錄被以隨機的順序被插入,頁面是從1/2到 15/16滿。如果索引頁的填充因子降到低於1/2,innodb試著搜尋索引樹來釋放頁。
Mysql安裝的目錄結構詳解
這節描述安裝 mysql ab提供的二進位制 和原始碼分發時建立的預設目錄布局。如果你安裝其它 商提供的分發,應使用其它布局。在windows中,mysql 5.1的預設安裝目錄是c program files mysql mysql server 5.1。一些windows使用者寧願安裝到原來的預...
mysql教程目錄 資料目錄 MySQL
資料庫是乙個複雜而又關鍵的系統,為確保系統安全 高效執行,需熟悉資料庫內部的運作機制,掌握各種維護工具,並做好日常的管理工作。下面列舉幾項主要工作職責 伺服器的關閉和啟動 管理使用者帳號 管理日誌檔案 資料庫備份恢復 資料庫優化 確保資料庫資料安全 資料庫軟體公升級。資料目錄 在unix linux...
python目錄在哪 如何檢視mysql目錄在哪
檢視mysql目錄在哪的方法 一 檢視檔案安裝路徑 由於軟體安裝的地方不止乙個地方,所有先說檢視檔案安裝的所有路徑 位址 這裡以mysql為例。比如說我安裝了mysql,但是不知道檔案都安裝在哪些地方 放在哪些資料夾裡,可以用下面的命令檢視所有的檔案路徑 在終端輸入 whereis mysql 回車...