MySQL查询优化

一、查询优化之join优化

(一)关联字段加索引

1、alter table t_name add  index(id);

2、select count(*) from dept d  join emp e on d.id = e.id;

(二)小表驱动大表原则

1、小表驱动大表原则:因为程序链接比较消耗资源并且费时,涉及资源申请和释放,因此,先建立程序链接(使用小表),再进行数据查询(大表),查询速度会比较快。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 
例如:表A(小表),表B(大表)

1、select * from A where cc in (select cc from B) ;效率低,先查大表,相当于 :
for select cc from B 
   for select * from A
2、select * from A where exists(select 1 from B where cc=A.cc) ;// 效率高,先查小表,相当于:
for select * from A  
   for select cc from B where cc =A.cc

注意:(1)not in 和not exists的区别:如果查询语句使用了not in ,则内外表都进行全表扫描,不会用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

(2) EXISTS 语法理解为:将主查询的数据放在子查询中做条件验证,根据结果TRUE 和 FALSE 来决定主查询中的数据是否需要保留。EXISTS 子查询只返回TRUE 或 FALSE ,因此子查询中的SELECT * 可以是SELECT 1 或者其他,MySql 的官方说在实际执行时会忽略SELECT 清单,因此是没有 什么区别的。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位远方的诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值