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
小表驅動大表
類似迴圈巢狀。for int i 5 如果小的迴圈在外層,對於資料庫連線來說就只連線5次,進行5000次操作,如果1000在外,則需要進行1000次資料庫連線,從而浪費資源,增加消耗。這就是為什麼要小表驅動大表。在tb dept bigdata表中插入100條資料,在tb emp bigdata表中...
mysql 大表 驅動 MySQL小表驅動大表
在了解之前要先了解對應語法 in 與 exist。in後的括號的表示式結果要求先輸出一列字段。與之前的搜尋字段匹配,匹配到相同則返回對應行。mysql的執行順序是先執行子查詢,然後執行主查詢,用子查詢的結果按條匹配主查詢。exist後的括號裡則無輸出要求,exist判斷後面的結果集中有沒有行,有行則...
MySQL 小表驅動大表
小表驅動大表 準備兩站表 create table student id int 11 notnull,no varchar 20 default null name varchar 20 default null primary key id engine innodb default chars...