Mysql中in, exists與or的區別

2021-10-09 14:45:08 字數 810 閱讀 4990

假設表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...