1. 程式人生 > >mysql優化之索引

mysql優化之索引

總結 例如 drop mysql5 建立 語句 運算操作 空間 耗時

Mysql優化之使用索引

1,索引簡介

索引是單獨一種數據結構,單獨存在的一個空間。可以把數據表裏的建立了索引的字段,進和物理地址,存在在一塊,這塊空間就是‘索引’。

查詢數據先從索引中查詢,查詢到之後,可以直接定位到物理地址,通過物理地址,直接找到真實數據。查詢會更快速。

索引是一種 以空間換時間的一種方式,犧牲了空間和寫的速度,提高了查詢速度

2,準備演示數據表

這裏以myisam引擎的數據庫為例,我準備了一張1800000條數據的表,這張表存儲時包含了三個文件,.Frm是表結構文件,.MYD是表數據文件,.MYI是表索引文件,Mac下使用管理員模式將這三個文件復制到mysql相應目錄下

提示:Mac使用su命令切換到root模式

技術分享

技術分享

退出root模式

技術分享

查看數據庫student裏是否有這個表

技術分享

查看一下結果,這裏沒有加主鍵,因為主鍵默認具有索引

技術分享

3,添加使用索引

先看下不加索引時的查詢速度

技術分享

把empno設為主鍵

技術分享

再看一下查詢速度

技術分享

會發現查詢速度有很大提升

那麽非主鍵索引怎麽加呢,例如來查一下ename= jKYMOL的記錄

技術分享

查詢耗時0.37秒,下面給ename添加索引

技術分享

再來查詢

技術分享

現在來總結一下添加索引的語法

主鍵索引:alter table 表名 add primary key (主鍵字段)

唯一索引:alter table 表名 add unique key (唯一鍵字段)

普通索引:alter table 表名 add key (普通字段)

全文索引:alter table 表名 add fulltext key (文本類型字段,mysql5.6以下myisam支持)

符合索引:alter table 表名 add 索引類型 [索引名稱] (字段)

5,索引可以添加那麽就可刪除,怎麽刪除呢

帶自增屬性主鍵索引刪除,需要先刪除自增屬性

刪除(修改)自增屬性語法:alter table 表名 modify 字段 字段屬性

刪除主鍵索引語法:alter table 表名 drop primary key

刪除非主鍵索引語法:alter table 表名 drop 索引名

例如刪除索引ename

技術分享

現在再來查一下數據

技術分享

可以看到查詢時間又變長了

補充:查看某條查詢語句是否會用到索引

語法:explain sql語句\G

說明:後面的\G是格式化輸出

例如:

技術分享

6,索引原則

很多時候,增加了索引,但是沒有被使用到。這種情況,其實索引是沒有起到作用的。要避免出現這種情況。

列獨立,即sql語句的字段不允許有運算操作,包含函數方法

技術分享

技術分享

左固定,使用模糊查詢只有左邊固定時才能用到索引

先給ename字段添加索引alter table emp add key (ename);

技術分享

使用show create table emp;命令查看添加結果

技術分享

使用模糊查詢,查詢ename字段

技術分享

發現只有左固定時查詢速度才會很快

復合索引,多個字段組合成為索引,字段同時出現,可以使用到索引,單獨出現使用不到索引

給enamel和deptno建立復合索引

技術分享

查看索引被使用情況

技術分享

or原則,or條件兩端都有索引,則索引可用,有一端沒有索引,則索引都不可用

技術分享

mysql優化之索引