假設表a中,字段 name的值可能為"x", "y", "z",要找出a表中name為y", "z"的記錄,有兩種方式
or與in的比較
in和exists方式
假設表b中,字段 name的值可能為"w", "y", "z",現要找出a表中name與b表中name相同的記錄:
**1:select * from a where exists (select b.name from b where a.name = b.name)
**2:select * from a where name in (select b.name from b where a.name = b.name)
for(i=1; i<100; i++)
for(j=1; j<10000; j++)
call fun(); // 呼叫函式
【i】被賦值了100次,而【j】被賦值了100*10000次。
for(i=1; i<10000; i++)
for(j=1; j<100; j++)
call fun(); // 呼叫函式
【i】被賦值了10000次,而【j】被賦值了100*10000次
in方式相當於先選擇j迴圈(內錶,b表),後執行i迴圈(外表,a表)
exist相當於先選擇i迴圈(外表,a表),後執行j迴圈(內錶,b表)
結論:(優化:小標驅動大表)
如果a表記錄多於b表記錄,則選擇in效率更高(以小表驅動大表)
如果a表記錄少於b表記錄,則選擇exists效果更高(還是小表驅動大表)
hive中對子查詢如in,exists等支援
案例情況 同事使用公司資料探查跑一段 部分 如下,報錯,顯示不支援in內的子查詢。但是直接用虛擬機器去跑的話 沒有任何報錯,也出結果,很奇怪。select t1.sign code as bus src t1.organization no t3.loan amts t4.restsum null ...
MySql中UNION與UNION ALL的區別
union用的比較多union all是直接連線,取到得是所有值,記錄可能有重複 union 是取唯一值,記錄沒有重複1 union 的語法如下 sql 語句 1 union sql 語句 2 2 union all 的語法如下 sql 語句 1 union all sql 語句 2 效率 unio...
mysql中NULL與 區別
在mysql中 空值 和 null 的概念 首先,我們要搞清楚 空值 和 null 的概念 1 空值是不占用空間的 2 mysql中的null其實是占用空間的 下面來分析下建立的語句 建立test表 create table test id int 10 unsigned not null auto...