zl程序教程

您现在的位置是:首页 >  其它

当前栏目

MYSQLIN与EXISTS的优化示例介绍

优化 介绍 示例 exists mysqlin
2023-06-13 09:15:40 时间

优化原则:小表驱动大表,即小的数据集驱动大的数据集。

#############原理(RBO)#####################

select*fromAwhereidin(selectidfromB)
等价于:
forselectidfromB
forselect*fromAwhereA.id=B.id

当B表的数据集必须小于A表的数据集时,用in优于exists。

select*fromAwhereexists(select1fromBwhereB.id=A.id)
等价于
forselect*fromA
forselect*fromBwhereB.id=A.id

当A表的数据集系小于B表的数据集时,用exists优于in。

注意:A表与B表的ID字段应建立索引。

例如:

/**执行时间:0.313s**/
SELECTSQL_NO_CACHE*FROMrocky_membermWHEREEXISTS(SELECT1FROMrocky_vip_approaWHEREm.ID=a.user_idANDa.passed=1);
/**执行时间:0.160s**/
SELECTSQL_NO_CACHE*FROMrocky_membermWHEREm.IDin(SELECTIDFROMrocky_vip_approWHEREpassed=1);

notin和notexists用法类似。