sql优化面试

1. exists 和in 的区别

当外查询的数据大时,子查询中的记录较少时,用in;先查询子句,然后把外表一条条的与已得到的查询结果匹配,这个时候子查询还会重新运行一遍;

当子查询的记录较多,外查询的数据较少时,用exists;先对外表做loop循环, 把外表的每一行与子表的查询去匹配,相当于两个嵌套的for循环,得到了正确结果之后就返回相当于break;。

exists对外表做loop循环,in把内表外表做hash连接;

 

2. 尽量少使用* ,*号扫描所有字段

3. 尽量少使用%like,%在最前面会进行全局扫描;

4. having  和 where  

having 和where  都是增加查询条件;

having  一般用于对于分组后 的语句查询,where是普通的条件;

where只能对一条数据设置条件,而having是针对的一组;一般是先where过滤然后在使用having;

5. 尽量使用多表连接,避免子查询

6.尽量在where后面 少用!= < >,这样引擎放弃索引 进行全局扫描 ;

避免在where子句中进行函数操作;

7. from where     的子句执行顺序都是从右往左,从下往上,所以

from  将表数据少的放后面,where条件筛选掉数据多的放后面,groupby 从左往右,放在where后面,

having 消耗资源较大,他是在检出所有资源之后再使用的, 所以尽量少用,他是对最后的结果排序,或者对组添加条件;

8.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值