mysql優化之索引
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優化之索引