1. 程式人生 > >MySQL優化----索引

MySQL優化----索引

一、主鍵索引

建立主鍵索引

索引名規範:ix_表名_欄位名
語法:

create index 索引名 on 表名(欄位名)

在這裡插入圖片描述
檢視索引是否建立成功

show index from 表名\G;

在這裡插入圖片描述

二、全文索引

應用場景:
在這裡插入圖片描述

建立全文索引

#建立全文索引
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 well show ...'), ('MySQL Security','When configured properly,MySQL ...'), ('MySQL vs.YourSQL','In the following database comparison ...'
);

檢視索引是否建立成功

    show index from articles \G;

在這裡插入圖片描述

使用索引

語法及使用索引查詢

#語法
select * from 表名 where match(欄位名,...) against('關鍵字');
#使用索引查詢
select * from articles where match(title,body) against('database');
#使用explain分析sql語句
explain select * from articles where match(title,body) against('database');

輸入以上兩個命令:
在這裡插入圖片描述


檢視是否使用索引

“\G” 的作用是將查到的結構旋轉90度變成縱向

explain select * from articles where match(title,body) against('database')\G;

在這裡插入圖片描述
如果你按照平時我們查關鍵字的方法模糊查詢,是沒有使用索引的,看下圖;

#使用like關鍵字模糊查詢
explain select * from articles where body like 'database%' \G;

在這裡插入圖片描述
查詢文章表
在這裡插入圖片描述
然後使用索引查詢關鍵字‘mysql’,看看有什麼變化?

注意:這裡查詢關鍵字是不區分大小寫的;

在這裡插入圖片描述
是不是很奇怪,分明有五條包含‘mysql’的內容,但為什麼查出是空的?
接下來再看,關鍵字“database”在每一行出現的可能性:

select match(title,body) against('database') from articles;

在這裡插入圖片描述
分別在第一行與第五行,‘database’出現的機率為38%
作為對比,再來看,關鍵字“mysql”在每一行出現的可能性:

select match(title,body) against('mysql') from articles;

在這裡插入圖片描述
奇怪了,反而在每一行都出現的‘mysql’,出現的可能性竟為0。
關鍵字“mysql”沒有建立索引,是因為:

這個關鍵字佔全文50%的比例,所以不能建立索引。

總結

1、 全文索引必須是myisam儲存引擎。
2、 MySQL自己的fulltext是不支援中文的,用sphinx(coreseek)技術去處理中文。
3、 語法:match(欄位,…) against (‘關鍵字’)
4、 在50%以上都出現的關鍵字,是不會做全文索引的,(這個特點就告訴我們,要做全文索引必須是海量資料)。這個詞叫停止詞(停止字)。

三、唯一索引