建立MySQL索引
阿新 • • 發佈:2018-12-11
簡介:
索引是對資料庫表中一列或多列的值進行排序的一種表結構,使用索引可以提高資料庫中特定資料的查詢速度。索引也是一個單獨的、儲存在磁碟上的資料庫結構,包含著對資料表裡所有記錄的引用指標,使用索引用於快速找出在某個或多個列中有一特定值得行。
分類:
普通索引、唯一索引、單列索引、組合索引、全文索引、空間索引
設計索引的原則:
索引的數量要適當,不是越多越好;資料量小的表最好不要使用索引,達不到索引優化的效果;根據對資料表的特定需求來設定不同的索引
1、建立普通索引
MySQL中的基本索引型別,允許定義索引的列中插入重複值和空值。
MariaDB [vincen]> CREATE TABLE book -> ( -> bookid INT NOT NULL, -> bookname VARCHAR(255) NOT NULL, -> authors VARCHAR(255) NOT NULL, -> info VARCHAR(255) NULL, -> comment VARCHAR(255) NULL, -> year_publication YEAR NOT NULL, -> INDEX(year_publication) #建立欄位為year_publication普通索引 -> ); Query OK, 0 rows affected (0.01 sec)
2、建立唯一索引
索引列的值必須唯一,但允許有空值
MariaDB [vincen]> CREATE TABLE a1
-> (
-> id INT NOT NULL,
-> name CHAR(30) NOT NULL,
-> UNIQUE INDEX UniqIdx(id) #建立欄位為id的唯一索引
-> );
Query OK, 0 rows affected (0.01 sec)
3、建立單列索引
也就是一個索引,只包含單個列。一個表裡允許有多個單列索引
MariaDB [vincen]> CREATE TABLE a2 -> ( -> id INT NOT NULL, -> name CHAR(50) NULL, -> INDEX SingleIdx(name(20)) #建立欄位為name的單列索引 -> );
4、建立組合索引
在表的多個欄位組合上建立的索引。使用組合索引時遵循最左字首集合
MariaDB [vincen]> CREATE TABLE a3
-> (
-> id INT NOT NULL,
-> name CHAR(30) NOT NULL,
-> age INT NOT NULL,
-> info VARCHAR(255),
-> INDEX MultiIdx(id, name) #建立欄位為id和name的組合索引
-> );
5、建立全文索引
全文索引型別為FULLTEXT,在定義索引的列上支援值的全文查詢,允許在這些索引列中插入重複值和空值。可以在CHAR,VARCHAR,TEXT型別的列上建立。要注意的是,在MySQL中只有MyISAM儲存引擎支援全文索引。但MySQL預設的儲存引擎是InnoDB,所以建立全文索引的時候要把儲存引擎改為MyISAM.
MariaDB [vincen]> CREATE TABLE a4
-> (
-> id INT NOT NULL,
-> name CHAR(30) NOT NULL,
-> age INT NOT NULL,
-> info VARCHAR(255),
-> FULLTEXT INDEX FullTxtIdx(info) #建立欄位為info的全文索引
-> )
-> ENGINE=MyISAM; #將這個資料表的儲存引擎改為MyISAM
Query OK, 0 rows affected (0.02 sec)
6、建立空間索引
空間索引是對空間資料型別的欄位建立的索引。(空間資料型別有GEOMETRY,POINT,LINESTRING,POLYGON)。其中,建立空間索引的列,必須即將其宣告為NOT NULL,而且空間索引只能在MyISAM儲存引擎中建立。
MariaDB [vincen]> CREATE TABLE a5
-> ( g GEOMETRY NOT NULL,
-> SPATIAL INDEX spatIdx(g) #建立欄位為g的空間索引
-> )
-> ENGINE=MyISAM; #修改這個表的儲存引擎為MyISAM