or連線是否會使用索引

2021-08-25 12:04:13 字數 1325 閱讀 4063

資料表結構如下

create

table book

(bookid int

notnull

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

notnull,

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語句:

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,其實是將查詢出的結果取並集。

檢視索引是否被使用

舉個栗子 select from scott.emp where empno 7369 方式一 f5,解釋計畫視窗,檢視索引名是否被用 方式二 1.執行sql語句 select from scott.emp where empno 7369 2.將表的索引pk emp納入監控 alter index...

不會使用索引,導致全表掃瞄情況

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...

不會使用索引,導致全表掃瞄情況

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...