1. 程式人生 > 資料庫 >mysql - 索引分類 & 建立

mysql - 索引分類 & 建立

一、索引分類:

MySQL目前主要有以下幾種索引型別:

  1. 普通索引
  2. 唯一索引
  3. 主鍵索引
  4. 組合索引
  5. 全文索引

二、建表語句:

CREATE TABLE table_name[col_name data type]
[unique|fulltext][index|key][index_name](col_name[length])[asc|desc]
  1. unique | fulltext 為可選引數,分別表示唯一索引全文索引
  2. index key 為同義詞,兩者作用相同,用來指定建立索引;
  3. col_name為需要建立索引的欄位列,該列必須從資料表中該定義的多個列中選擇;
  4. index_name
    指定索引的名稱,為可選引數,如果不指定,預設col_name為索引值
  5. length可選引數,表示索引的長度,只有字串型別的欄位才能指定索引長度;
  6. asc 或 desc 指定升序或降序的索引值儲存。

三、各類索引的建立語句:

普通索引:

  1. 直接建立:
    CREATE INDEX index_name ON table(column(length));
    mysql> create index general_index on index_test(title);
    Query OK, 0 rows affected (0.02 sec)
    Records: 0 Duplicates: 0 Warnings: 0
  2. 修改表結構:
    ALTER TABLE table_name ADD INDEX index_name (column(length));
    mysql> alter table index_test add index general_index1 (title);
    Query OK, 0 rows affected, 1 warning (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 1
  3. 建表時同時建立索引:
    CREATE TABLE `table` (
        `id` int(11) NOT NULL AUTO_INCREMENT ,
        `title` char(255) CHARACTER NOT NULL ,
        `content` text CHARACTER NULL ,
        `time` int(10) NULL DEFAULT NULL ,
        PRIMARY KEY (`id`),
        INDEX index_name (title(length))
    );
  4. 刪除索引:
    DROP INDEX index_name ON table;
    mysql> drop index general_index on index_test;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0

     

唯一索引:

簡述:與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引(允許多列欄位),則列值的組合必須唯一。

  1. 直接建立:
    CREATE UNIQUE INDEX index_name ON table(column(length));

     

  2. 修改表結構:
    ALTER TABLE table_name ADD UNIQUE index_name (column(length));

     

  3. 建表時建立:
    CREATE TABLE `table_name`(
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `title` char(255) NOT NULL,
        `content` text,
        `time` int(10) NULL DEFAULT NULL,
        UNIQUE index_name (title(length))
    ) ;

     

主鍵索引:

簡述:又叫做聚簇索引,是一種特殊的唯一索引,一個表

  1. 只能有一個主鍵
  2. 不允許有空值,
  3. 允許包含1列或者多列欄位
  4. 一般是在建表的時候同時建立主鍵索引;

作用:有了聚簇索引,將來插入的資料行,在同一個區內,都會按照ID值的順序在物理磁碟上有序儲存

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) NOT NULL ,
    PRIMARY KEY (`id`)
);

組合索引(聯合索引):

簡述:指多個欄位上建立的索引,只有在查詢條件中使用了建立索引時的第一個欄位,索引才會被使用。使用組合索引時遵循最左字首集合

  1. 直接建立:
    CREATE INDEX index_name ON table(column_1, colunmn_2, ...);

     

  2. 修改表結構:
    ALTER TABLE table_name ADD INDEX index_name (column_1, column_2, ...);
    mysql> alter table index_test add index joint_index (title, content,c_time);
    ERROR 1170 (42000): BLOB/TEXT column 'content' used in key specification without a key length
    mysql> 
    mysql> alter table index_test add index joint_index (title, content(30),c_time);
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0

     

     

  3. 建表時建立:
    CREATE TABLE `table` (
        `id` int(11) NOT NULL AUTO_INCREMENT ,
        `title` char(255) CHARACTER NOT NULL ,
        `content` text CHARACTER NULL ,
        `time` int(10) NULL DEFAULT NULL ,
        PRIMARY KEY (`id`),
        INDEX index_name (title(length), time)
    );

     

全文索引:

簡述:

主要用來查詢文字中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其它索引大不相同,它更像是一個搜尋引擎,而不是簡單的where語句的引數匹配。fulltext索引配合match against操作使用,而不是一般的where語句加like。它可以在create table,alter table ,create index使用,不過目前只有char、varchar,text 列上可以建立全文索引。值得一提的是,在資料量較大時候,現將資料放入一個沒有全域性索引的表中,然後再用CREATE index建立fulltext索引,要比先為一張表建立fulltext然後再將資料寫入的速度快很多。

  1. 建表時建立:
    CREATE TABLE `table` (
        `id` int(11) NOT NULL AUTO_INCREMENT ,
        `title` char(255) CHARACTER NOT NULL ,
        `content` text CHARACTER NULL ,
        `time` int(10) NULL DEFAULT NULL ,
        PRIMARY KEY (`id`),
        FULLTEXT (content)
    );

     

  2. 直接建立:
    CREATE FULLTEXT INDEX index_name ON table(content);

     

  3. 修改表:
    ALTER TABLE table_name ADD FULLTEXT INDEX index_name (content);

     

顯示索引資訊:

mysql> show index from table_name\G;