建立student表,id是主鍵
建立復合索引
create index idx_name_age on student(name,age);檢視索引
1.全值匹配我最愛
explain select * from student where name = '張三' and age = 1;2.最佳左字首法則,帶頭大哥不能死,中間兄弟不能少。
3.不要在索引列上做任何操作
explain select * from student where left(name,1) = '張' and age = 1;
4.範圍條件後列上索引失效
explain select * from student where age > 1 and name = '王五';
查詢級別是範圍,name上的索引失效。
5.盡量使用覆蓋索引減少使用select *
6.使用不等於(!= 或者<>)不能使用索引
explain select * from student where name != '張三';
7.使用 is null 或者 is not null 也不能使用索引
8.like 已萬用字元開頭(%abc)導致索引失效 (解決方法:使用覆蓋索引)
explain select * from student where name like '%張%';
想用的話解決方法,使用覆蓋索引
explain select name from student where name like '%張%';9.少用or,用它來連線索引會失效
explain select * from student where name = '張三' or age = 2;
like索引失效原因 索引失效的情況及原因定位
同事遇到乙個奇葩的問題,乙個表裡某個欄位建了索引,但是有的值走索引,有的值不走索引。因為一般情況乙個字段要麼完全不走索引,要麼走索引,怎麼會有的值走索引,有的不走索引。select 條件非常簡單,因為涉及到敏感資訊就不貼表結構了。例如select from order where status 2 ...
Oracle索引失效原因及解決方法
1使用否定關鍵字 not in,not exist select fromdrama where id 1,mysql不會 2單獨使用不等式關鍵字 直接用 或 可能會失效,mysql不會 3使用null關鍵字 is null或is not null 可能會失效 4左模糊或全模糊 like 放在前面 ...
索引失效的原因
1 隱式轉換導致索引失效.這一點應當引起重視.也是開發中經常會犯的錯誤.由於表的字段tu mdn定義為varchar2 20 但在查詢時把該字段作為number型別以where條件傳給oracle,這樣會導致索引失效.錯誤的例子 select from test where tu mdn 13333...