mysql索引 index的類型和使用

    提升SELECT操做性能最好的方法就是在查詢的一列或者多列建立索引。索引就像錶行的指針,容許快速肯定那些行和WHERE語句條件匹配,並檢索這一行的其餘列值,在mysql中全部的數據類型均可以被索引。咱們能夠根據存儲引擎定義每一個表的最大索引數和最大索引長度,每一種索引引擎的每張表至少支持16個索引,索引總長度最少爲256字節。對於MyISAM表總長度能夠達到1000字節,而對於InnoDB表能夠達到767字節。mysql

  mysql常見的索引包括  PRIMARY KEY,UNIQUE,INDEX和FULLTEXT四種索引。sql

 PRIMARY KEY 索引:mysql在建立主鍵的時候自動會爲主鍵建立索引,而不須要咱們顯式的聲明索引。好比:性能

mysql> create table tPri(
    -> id INTEGER PRIMARY KEY,
    -> name VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> explain select * from tPri where id>=1;
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | tPri  | range | PRIMARY       | PRIMARY | 4       | NULL |    1 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.01 sec)

   上面的explain命令能夠解析sql語句優化sql語句,後續會詳細介紹。使用此命令能夠選擇出一行數據,這裏咱們只關注possible_keys 和key,這兩個字段描述的是索引的類型,能夠看出建立PRIMARY KEY的時候直接建立一條索引。優化

    建立其餘索引能夠直接在建立表的時候建立索引,也可使用create [unique|fulltext|spatial] index index_name[using index_type] on table_name(index_col_name,...);其中index_col_name能夠指定長度col_name[(length)] [ASC|DESC];同時咱們也可使用alter table的語法增長索引。spa

    UNIQUE:可選。表示索引爲惟一性索引。
    FULLTEXT;可選。表示索引爲全文索引。
    SPATIAL:可選。表示索引爲空間索引。
    INDEX和KEY:用於指定字段爲索引,二者選擇其中之一就能夠了,做用是同樣的。
    索引名:可選。給建立的索引取一個新名稱。
    字段名1:指定索引對應的字段的名稱,該字段必須是前面定義好的字段。
    長度:可選。指索引的長度,必須是字符串類型纔可使用。
    ASC:可選。表示升序排列。
    DESC:可選。表示降序排列。指針

下面分別是建立索引 的三種狀況。code

1.在 建表的時候直接建立索引。索引

mysql> create table user(
    -> id INTEGER,
    -> name VARCHAR(20),
    -> address VARCHAR(100),
    -> phone varchar(11),
    -> index idx_1(id),
    -> unique index idx_2(name),
    -> fulltext index idx_3(address)
    -> );
Query OK, 0 rows affected (0.48 sec)

2.使用alter建立索引字符串

mysql> create table user(
    -> id INTEGER,
    -> name VARCHAR(20),
    -> address VARCHAR(100),
    -> phone varchar(11)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> alter table user add primary key(id);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table user add unique (name);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table user add index idx_1 ( phone);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table user add fulltext ( address);
Query OK, 0 rows affected, 1 warning (0.24 sec)
Records: 0  Duplicates: 0  Warnings: 1

3 使用create建立索引table

mysql> create table user(
    -> id INTEGER,
    -> name VARCHAR(20),
    -> address VARCHAR(100),
    -> phone varchar(11)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> create index idx_1 on user(id);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create unique index idx_2 on user(name);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create fulltext index idx_3 on user(address);
Query OK, 0 rows affected, 1 warning (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 1

刪除索引就比較容易了,直接使用drop便可。

mysql> drop index idx_1 on user;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
相關文章
相關標籤/搜索