mysql----如何在使用like %xxx% 的情況下避免索引失效

背景:當在某列建立索引,並且在查詢條件中使用like '%xxx%' 這樣的語句時,會使得索引失效。當時實際的環境必須使用  like '%xxx%' 這樣的條件,那麼應該如何解決這個問題。

答:使用覆蓋索引避免這個問題。即:在要查詢的列和其他的列之間建立一個複合索引,然後查詢時同時查詢和複合索引有關的列即可避免全表掃描。

 


create table user_info(
		id int PRIMARY key auto_increment,
		name varchar(16) default '',
		age tinyint default 0,
		address varchar(32) default ''
);

insert into user_info(name,age,address) 
values
('1a1',1,'beijing'),
('2b2',2,'shanghai'),
('3c3',3,'tianjin'),
('4a4',4,'chongqi'),
('5b5',5,'guangzhou'),
('6c6',6,'shenzhen');

#創建複合索引
create index idx_n_a on user_info(name,age);

explain select name from user_info where name like '%a%';
1	SIMPLE	user_info		index		idx_n_a	53		6	16.67	Using where; Using index



explain select name,age from user_info where name like '%a%';
1	SIMPLE	user_info		index		idx_n_a	53		6	16.67	Using where; Using index


以下兩個例子是查詢了不在複合索引中的列進而造成全表掃描
explain select name,age,address from user_info where name like '%a%';
1	SIMPLE	user_info		ALL					6	16.67	Using where


explain select * from user_info where name like '%a%';
1	SIMPLE	user_info		ALL					6	16.67	Using where

 

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