MySQL Optimization Part 3 - Indexes Operations

MySQL Optimization Part 3 - Indexes Operations

目錄


索引

說起提高數據庫性能,索引是最物美價廉的東西了。不用加內存,不用改程序,不用調sql,只要執行個正確的 create index,查詢速度就可能提高百倍千倍,這可真有誘惑力。可是天下沒有免費的午餐,查詢速度的提高是以插入、更新、刪除的速度爲代價的,這些寫操作,增加了大量的I/O。

一般情況下,有四種索引 (複合索引不算在內):主鍵索引/唯一索引/全文索引/普通索引。
下面來說說四種索引的增刪改查。

創建索引後,爲什麼查詢會變快:因爲由 BTREE 上的指針直接指向具體的數據行,指針操作當然快啦。


添加索引

主鍵索引

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

create table table_a(
id int unsigned primary key auto_increment,
name varchar(32) not null defaul '');
/*這時 id 列就是主鍵索引.*/

如果創建表時沒有指定主鍵索引,也可以在創建表後,再添加,指令如下:

alter table tablename add primary key (columnname);
create table table_b (id int , name varchar(32) not null default ‘’);

alter table table_b add primary key (id);

普通索引

一般來說,普通索引的創建,是先創建表,然後再創建普通索引。

create table table_c(
id int unsigned,
name varchar(32)
)

create index indexname on tablename (column1,column2);

全文索引

全文索引,主要是針對對文件,文本的檢索, 比如文章, 全文索引針對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%'

#正確的用法是:
select * from articles where match(title,body) against('database'); 

說明

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

唯一索引

創建方式1

#當表的某列被指定爲unique約束時,這列就是一個唯一索引
create table table_d(
id int primary key auto_increment,
name varchar(32) unique);

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

unique 字段可以爲NULL,並可以有多NULL, 但是如果是具體內容,則不能重複.

主鍵字段,不能爲NULL,也不能重複.

創建方式2

#在創建表後,再去創建唯一索引
create table table_e(
id int primary key auto_increment, 
name varchar(32));

create unique index indexname on tablename (columns..);

查詢索引

三種方式

# 缺點:不能夠顯示索引的名字
desc tablename\G
show index(es) from tablename\G
show keys from tablename\G

刪除索引

drop index indexname on tablename;
alter table tablename drop index indexname; 

修改索引

先刪除,再重新創建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章