mysql 索引優化

2022-06-19 17:51:11 字數 2135 閱讀 9969

drop table if exists employees;

create table employees(

`id` int(11) not null auto_increment,

`name` varchar(24) not null default '' comment '姓名',

`age` int(11) not null default '0' comment '年齡',

`position` varchar(20) not null default '' comment '職位',

`hire_time` timestamp not null default current_timestamp comment '入職時間',

primary key (`id`),

key `idx_name_age_position` (`name`,`age`,`position`)

using btree

) engine=innodb auto_increment=4 default charset=utf8

comment='員工表';

)設定name 、 age 、 position 為復合索引

insert into employees(name,age,position,hire_time) values('張三',22,'net',now());

insert into employees(name,age,position,hire_time) values('李四', 23,'c#',now());

insert into employees(name,age,position,hire_time) values('王五',23,'python',now());

當前這三個欄位按從左到右的方式查詢會走索引,最左匹配原則

如果索引了多列,要遵守最左字首法則。指的是查詢從索引的最 左前列開始並且不跳過索引中的列。

不在索引列上做任何操作

例如 計算、函式、(自動or手動)型別轉換等,會導致 索引失效而轉向全表掃瞄

explain select * from employees where left(name,1) = '張';

explain select * from employees where name= '小明' and age >

22 and position ='net';

我們可以計算下 key_len 長度,可以得知 索引只用到了 name 和 age , position 沒用用到索引,所以在復合索引中使用了範圍條件右邊的列索 引會失效。

explain select name, age, position from employees where name= '張三' and age = 22 and position ='net';
--此時extra是using index ,走索引,讀記憶體 可以看到,從 null 變成了 using index

explain select * from employees where name != '張三' 此時,extra欄位using where

explain select * from employees where name is not null 此時,extra欄位是using where

explain select * from employees where name like '%李'  此時,extra欄位是using where

萬用字元放結尾索引不會失效

explain select * from employees where name like '李%' 此時,extra欄位是using index condition

當覆蓋索引指向的字段是 varchar(380) 及 380 以上的字段時,覆蓋索引會失效!

1 explain select * from employees where name = 張三;  此時,extra欄位是using where

explain select * from employees where name = '張三' or name= '李四';

mysql 優化 聚集索引 mysql 索引優化

一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...

mysql索引優化原則 MySQL 索引優化原則

索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...

mysql索引優化原則 MySQL索引優化

mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...