mysql四種索引

wanghaitao4j發表於2018-10-11

四種索引(主鍵索引/唯一索引/全文索引/普通索引)

 

  1. 新增

 

1.1主鍵索引新增

當一張表,把某個列設為主鍵的時候,則該列就是主鍵索引

create table aaa

(id int unsigned primary key auto_increment ,

name varchar(32) not null defaul ‘’);

這是id 列就是主鍵索引.

 

如果你建立表時,沒有指定主鍵索引,也可以在建立表後,在新增, 指令:

alter table 表名 add primary key (列名);

 

舉例:

create table bbb (id int , name varchar(32) not null default ‘’);

alter table bbb add primary key (id);

 

1.2普通索引

一般來說,普通索引的建立,是先建立表,然後在建立普通索引

比如:

create table ccc(

id int unsigned,

name varchar(32)

)

 

create index 索引名 on 表 (列1,列名2);

 

1.3建立全文索引

全文索引,主要是針對對檔案,文字的檢索, 比如文章, 全文索引針對MyISAM有用.

建立 :

CREATE TABLE articles (

       id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

       title VARCHAR(200),

       body TEXT,

       FULLTEXT (title,body)

     )engine=myisam charset utf8;

 

INSERT INTO articles (title,body) VALUES

     ('MySQL Tutorial','DBMS stands for DataBase ...'),

     ('How To Use MySQL Well','After you went through a ...'),

     ('Optimizing MySQL','In this tutorial we will show ...'),

     ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),

     ('MySQL vs. YourSQL','In the following database comparison ...'),

     ('MySQL Security','When configured properly, MySQL ...');

 

如何使用全文索引:

錯誤用法:

select * from articles where body like ‘%mysql%’; 【不會使用到全文索引,具體原因看索引失效文章】

證明:

explain  select * from articles where body like ‘%mysql%’ 【explain的解釋看explain的文章】

 

正確的用法是:

select * from articles where match(title,body) against(‘database’); 【可以】

 

☞ 說明:

  1. 在mysql中fulltext 索引只針對 myisam生效
  2. mysql自己提供的fulltext針對英文生效->sphinx (coreseek) 技術處理中文
  3. 使用方法是 match(欄位名..) against(‘關鍵字’)
  4. 全文索引一個 叫 停止詞,  因為在一個文字中,建立索引是一個無窮大的數,因此,對一些常用詞和字元,就不會建立,這些詞,稱為停止詞.

 

1.4唯一索引

①當表的某列被指定為unique約束時,這列就是一個唯一索引

create table ddd(id int primary key auto_increment , name varchar(32) unique);

 

這時, name 列就是一個唯一索引.

unique欄位可以為NULL,並可以有多NULL, 但是如果是具體內容,則不能重複.

主鍵欄位,不能為NULL,也不能重複.

 

②在建立表後,再去建立唯一索引

create table eee(id int primary key auto_increment, name varchar(32));

 

create unique index 索引名  on 表名 (列表..);

 

查詢索引

desc 表名 【該方法的缺點是: 不能夠顯示索引名.】

show index(es) from 表名

show keys from 表名

 

刪除

alter table 表名 drop index 索引名;

如果刪除主鍵索引。

alter table 表名 drop primary key       [這裡有一個小問題]

 

修改

先刪除,再重新建立.

 

為什麼建立索引後,速度就會變快?

相關文章