為什麼小表驅動大表?

2021-09-29 11:31:56 字數 612 閱讀 2045

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...