1. 程式人生 > >建立MySQL索引

建立MySQL索引

簡介:

索引是對資料庫表中一列或多列的值進行排序的一種表結構,使用索引可以提高資料庫中特定資料的查詢速度。索引也是一個單獨的、儲存在磁碟上的資料庫結構,包含著對資料表裡所有記錄的引用指標,使用索引用於快速找出在某個或多個列中有一特定值得行。

分類:

普通索引、唯一索引、單列索引、組合索引、全文索引、空間索引

設計索引的原則:

索引的數量要適當,不是越多越好;資料量小的表最好不要使用索引,達不到索引優化的效果;根據對資料表的特定需求來設定不同的索引

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