A.假如只有一个索引的话
小表一趟for循环的代价+大表上使用B+树索引的代价<大表一趟for循环的代价+小表使用B+树索引的代价
B.假如使用块的嵌套循环连接的话
内存中放小表的I/O代价小于内存中放大表的 I/O代价,数据库系统实现P108,简而言之,经过化简是 B(S)+B(S)B( R)/M-1,由于加号的后面是定值,所以前面的值的话整体就是小的
C.小表驱动大表的案例:
in和exists的对比:
下面关于大表和小表的讨论均为A是小表
a.小表放到in之后的效率优于放到in之前
例:select name from B where id in(select id in A);
分析:上面的查询语句可以拆成 首先 select id in A; 其次 select name from B where B.id=A.id;这样的话
b.小表放到exists之前效率优于放到exists之后
例:select name from A where(Select * from B where B.id=A.id);
分析:先遍历小表A,取得A中每个值和B中的值进行比对,如果比对成功了返回true