or连接是否会使用索引

or连接条件字段,全部设置索引的时候,才会使用索引,否则将不会使用索引。

验证如下:

数据表结构如下

create TABLE book
(
bookid INT NOT NULL primary key auto_increment,
bookname VARCHAR(255) NOT NULL ,
authors VARCHAR(255) NOT NULL,
info VARCHAR(255) NULL,
comment VARCHAR(255) NULL,
year_publication YEAR NOT NULL,
INDEX(year_publication),
INDEX(bookname)
);

测试数据如下

INSERT `book` (`bookname`,`authors`,`info`,`comment`,`year_publication`) VALUES
('平凡的世界','路遥','加油','平凡的世界不平凡的人','1986'),
('活着','余华','加油','活着就有希望不平凡的人','1986'),
('平凡的世界','路遥','加油','平凡的世界不平凡的人','1986'),
('活着','余华','加油','活着就有希望不平凡的人','1986'),
('平凡的世界','路遥','加油','平凡的世界不平凡的人','1986'),
('活着','余华','加油','活着就有希望不平凡的人','1986'),
('平凡的世界','路遥','加油','平凡的世界不平凡的人','1986'),
('活着','余华','加油','活着就有希望不平凡的人','1986'),
('平凡的世界','路遥','加油','平凡的世界不平凡的人','1986'),
('活着','余华','加油','活着就有希望不平凡的人','1986')

使用explain来分析sql语句:

  1. EXPLAIN SELECT * FROM test.book WHERE `bookid`=1 OR `authors`='路遥';
    这里写图片描述
    bookid 主键索引,authors没有索引,最终没有使用索引。

2.EXPLAIN SELECT * FROM test.book WHERE `bookid`=1 OR `bookname`='平凡的世界';
这里写图片描述
bookid主键索引,bookname普通索引,最终两个索引,type为index_merge,其实是将查询出的结果取并集。

发布了20 篇原创文章 · 获赞 4 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Csw_PHPer/article/details/81952747
今日推荐