資料表結構如下
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.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...