黑马程序员技术交流社区

标题: 【南京校区】sql优化干货 [打印本页]

作者: 大蓝鲸小蟀锅    时间: 2018-12-16 20:48
标题: 【南京校区】sql优化干货
1、慎用like语句
(1)、where name like '%Jack' 索引失效
(2)、where name like 'Jack%' 索引生效
(3)、where name like '%Jack%' 索引失效
如果like 后面%在语句前面会导致索引失效
2、复合索引(纠错)
网上大部分论坛中的博客都是错误的。
user表中有如下字段,username,password,schoolname,给user表建立复合索引
create index index_name on user(username,password,schoolname);
查询语句:
select * from user where username='zs' and password='zs' and schoolname='yet' 索引生效
select * from user where username='zs' and password='zs' 索引生效
select * from user where username='zs' and schoolname='yet' username索引生效,schoolname索引
不生效
select * from user where password='zs' and schoolname='yet' 索引不生效
select * from user where password='zs' and username='zs' and schoolname='yet' 索引生效****
select * from user where schoolname='yet' and username='zs' and password='zs' 索引生效****
3、or慎用
or两侧的语句,如果有一侧没有索引,那么整个语句不走索引,但是如果两侧都有索引,这时候是走索引的。
4、is null ,is not null
目前版本已经可以走索引了,面试题答案有问题了
5、in
目前版本已经可以走索引了,面试题答案有问题了,不在需要使用between和exsit替换了
not in 不走索引
6、where子句中应尽量避免对索引字段操作(表达式操作或函数操作),比如select id from test where num/2 =
100应改为num = 200。
7、在使用复合索引时,查询时必须使用到索引的第一个字段,否则索引失效;并且应尽量让字段顺序与索引顺序一致。
8、查询时必须使用正确的数据类型。数据库包含了自动了类型转换,比如纯数字赋值给字符串字段时可以被自动转换,
但如果查询时不加引号查询,会导致引擎忽略索引







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2