當我們使用模糊查詢的時候對SQL加索引,應該加在字段的右邊,而不在字段左邊或者兩邊,因爲這樣做會導致所以的失效,那麼如何能做到加在兩邊呢?
先上一個例子:
下圖是數據庫表
CREATE TABLE `tbl_user`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`age`INT(11) DEFAULT NULL,
`email` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO tbl_user(`name`,`age`,`email`)VALUES('1aa1',21,'[email protected]');
INSERT INTO tbl_user(`name`,`age`,`email`)VALUES('2bb2',23,'[email protected]');
INSERT INTO tbl_user(`name`,`age`,`email`)VALUES('3cc3',24,'[email protected]');
INSERT INTO tbl_user(`name`,`age`,`email`)VALUES('4dd4',26,'[email protected]');
給name和age字段添加索引:
CREATE INDEX idx_user_nameAge ON tbl_user(NAME,age)
接着我們使用explain進行測試:
測試一:查詢的*
EXPLAIN SELECT * FROM tbl_user WHERE NAME LIKE '%aa%';
測試二:覆蓋索引
EXPLAIN SELECT id,NAME,age FROM tbl_user WHERE NAME LIKE '%aa%';
這裏我們可以看到索引沒失效,使用上述三個字段的部分字段也不會引起失效
測試三:加上其他字段,這裏我們並沒給email加上索引
EXPLAIN SELECT id,NAME,age,email FROM tbl_user WHERE NAME LIKE '%aa%';
我們可以看到索引失效了
所以,要解決模糊查詢的時候兩邊都加上%且索引不失效,那我們查詢的時候要覆蓋索引即可,即如上述的測試2,所以我們儘量給需要查詢的字段加上索引,然後再使用覆蓋索引就不會引起索引失效了。