【MYSQL學習筆記01】MySQL的資料索引Index
最近學習MySQL的索引,以下是一點學習心得與總結:
我們都知道,在java的語法中,index指陣列中的下標;但在MySQL中,index的意思是索引。
1. 何為索引
MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取資料的資料結構。
解構這句話,分析和總結一下資訊點,即:
索引,就是一種排好序,用於高效快速查詢資料的,資料結構 。
詳解:
資料庫=資料+資料結構;
在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料;
這樣就可以在這些資料結構上實現高階查詢演算法。
而這種資料結構,就是索引。
如果把MySQL比作一本書,那麼,資料庫就是封皮,索引就是目錄頁,資料就是書的正文頁;
一般來說,索引本身也很大,所以它往往以索引檔案的形式儲存在磁碟中;
2. MySQL索引結構
我們平常所說的索引,如果沒有特別指明,都是指B樹結構組織的索引(BTREE,即Balance Tree,多路平衡查詢樹,一般是二分的,但是也不一定);
ps:關於B樹、二叉樹、B-樹、B+樹的資料結構區別,會另寫一篇博文總結。
另外在開發中,常用索引結構還有Hash索引、full-text全文索引、R-Tree索引;由於這些都與DBA(資料庫管理)無關,不概述。
3. MySQL索引分類
(1)單值索引
即一個Index中只包含單個欄位(列),一個table中可以有多個單值索引;
(2)唯一索引(UNIQUE)
指Index中欄位的值,必須唯一(欄位列的值不允許重複),但允許是null(即欄位列中只有一個值是null的情況下);但唯一索引欄位列中有null,會降低效率,工作中一般不推薦使用;
ps: PRIMARY KEY AUTO_INCREMENT,自增主鍵天生就是單值且唯一索引;
ps:資料庫中null和空是兩碼事,空是’‘表示(單引號間沒有空格);
null佔空間,空是不佔空間的;
在建立欄位列時若DEFAULT NOT NULL,那麼該欄位可以插入’’,但不可以插入null;
(3)複合索引
即一個Index中包含多個欄位(列)。
4. MySQL索引基本語法
(1)建立索引([]表示可省略)
① 直接建立
CREATE [UNIQUE ] INDEX indexName ON mytable(col01,col02,col03......);
在表mytable中,建立(唯一)複合索引,索引名indexName,索引欄位是col01,col02,col03…
② 修改表的同時建立
ALTER TABLE 表名 ADD [UNIQUE ] INDEX [indexName] ON (columnname(length))
修改表,在表中加入(唯一)索引,索引名indexName,索引欄位是columnname(length);
(2)刪除索引
DROP INDEX [indexName] ON mytable;
(3)檢視索引
SHOW INDEX FROM 表名\G
ps:/G是將顯示結果由橫排轉豎排顯示
(4)使用ALTER命令新增資料表的索引
有3種方式來新增資料表的索引:
①
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):
該語句新增一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。
②
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):
這條語句建立索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)。
③
ALTER TABLE tbl_name ADD INDEX index_name (column_list):
新增普通索引,索引值可出現多次。