在线营销型网站制作,免费网站建设ydwzjs,wordpress 爬虫,站长统计网站小表驱动大表#xff0c;也就是说用小表的数据集驱动大表的数据集。假如有order和user两张表#xff0c;其中order表有10000条数据#xff0c;而user表有100条数据。
这时如果想查一下#xff0c;所有有效的用户下过的订单列表。可以使用in关键字实现#xff1a;
select… 小表驱动大表也就是说用小表的数据集驱动大表的数据集。假如有order和user两张表其中order表有10000条数据而user表有100条数据。
这时如果想查一下所有有效的用户下过的订单列表。可以使用in关键字实现
select * from order
where user_id in (select id from user where status1)也可以使用exists关键字实现
select * from order
where exists (select 1 from user where order.user_id user.id and status1)前面提到的这种业务场景使用in关键字去实现业务需求更加合适。为什么呢因为如果sql语句中包含了in关键字则它会优先执行in里面的子查询语句然后再执行in外面的语句。如果in里面的数据量很少作为条件查询速度更快。
而如果sql语句中包含了exists关键字它优先执行exists左边的语句即主查询语句。然后把它作为条件去跟右边的语句匹配。如果匹配上则可以查询出数据。如果匹配不上数据就被过滤掉了。这个需求中order表有10000条数据而user表有100条数据。order表是大表user表是小表。如果order表在左边则用in关键字性能更好。
总结一下
in 适用于左边大表右边小表。exists 适用于左边小表右边大表。
不管是用in还是exists关键字其核心思想都是用小表驱动大表。