1. 程式人生 > >not in,not exists,left join效能對比

not in,not exists,left join效能對比

今天注意到,公司的程式碼裡經常用到exists這個用法。也許個人習慣不一樣吧,測試了下效能。對比下,這三種效率上的區別。
mysql> select SQL_NO_CACHE count(*) from test1 where id not in(select id from test2);
+----------+
| count(*) |
+----------+
|   215203 |
+----------+
1 row in set (5.81 sec)

mysql> select SQL_NO_CACHE count(*) from test1 where not exists (select * from test2 where test2.id=test1.id);
+----------+
| count(*) |
+----------+
|   215203 |
+----------+
1 row in set (5.25 sec)

mysql> select SQL_NO_CACHE count(*) from test1 left join test2 on test1.id=test2.id where test2.id is null;             
+----------+
| count(*) |
+----------+
|   215203 |
+----------+
1 row in set (4.63 sec)

結論:生產環境裡,應儘量避免使用子查詢,用left join表連線取代之。

相關推薦

not in,not exists,left join效能對比

今天注意到,公司的程式碼裡經常用到exists這個用法。也許個人習慣不一樣吧,測試了下效能。對比下,這三種效率上的區別。 mysql> select SQL_NO_CACHE count(*) from test1 where id not in(select id

not in 如何轉化left join on提交效率

以下是一個轉換事例: 第一個樣例: select * from BUS_GG br WHERE 1 = 1 AND br.id NOT IN (SELECT RECEIVER_ID FROM SYS_GG);         select * from BUS_GG br

innot inexistsnot exists 在postgresql中的處理

os: centos 7.4 db: postgresql 11.1 # cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) # su - postgres -c "psql -c \"select versio

sql語句中的 innot inexistsnot exists 詳細用法說明和差別----not in失效

來看下面這樣一條SQL語句: select * from student where 20 < all (select score from student) 其中,(select score from student)返回的是所有分數的記錄集 只有當記錄集中的所有分數都大於20後,才會執行前面的SQ

in exist,not in ,not exist

轉自:https://www.cnblogs.com/tiantiansunny/p/3555986.html A: In:是把外表和內表做Hash 連線,而exists 是對外表作loop 迴圈,每次loop迴圈再對內表進行查詢。 當查詢兩個表的大小相當時,用In 和 exists差別不大。

Go 字串連線+=與strings.Join效能對比

Go字串連線 對於字串的連線大致有兩種方式: 1、通過+號連線 func StrPlus1(a []string) string { var s, sep string for i := 0; i < len(a); i++ { s += sep + a[i]

為什麼 EXISTS(NOT EXIST) 與 JOIN(LEFT JOIN) 的效能會比 IN(NOT IN) 好

前言 網路上有大量的資料提及將 IN 改成 JOIN 或者 exist,然後修改完成之後確實變快了,可是為什麼會變快呢?IN、EXIST、JOIN 在 MySQL 中的實現邏輯如何理解呢?本文也是比較粗淺的做一些介紹,知道了 MySQL 的大概執行邏輯,也方便理解。本書絕大多數內容來自:高效能MySQL第三版

Sql語句優化-查詢兩表不同行NOT INNOT EXISTS、連接查詢Left Join

exists join ngs sdn 連接查詢 blog 建議 開發 word 在實際開發中,我們往往需要比較兩個或多個表數據的差別,比較那些數據相同那些數據不相同,這時我們有一下三種方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,

Oracle,用left join 替代 exists ,not exists,in , not in,提高效率

.cn rom mage png 高效 pan div sele bsp Not IN問題 Exists,not Exists,in,not in 例如: DELETE FROM YSHA WHERE NOT EXISTS(SELECT 1 FROM YSHB B

Sql語句優化-查詢兩表不同行NOT INNOT EXISTS、連線查詢Left Join

在實際開發中,我們往往需要比較兩個或多個表資料的差別,比較那些資料相同那些資料不相同,這時我們有一下三種方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用連線查詢(inner join,left join 或者 right join)。

面試被問之-----sql優化中inexists的區別 Mysql中 in or exists not exists not in區別 (網路整理) Sql語句中INexists的區別及應用 [筆記] SQL效能優化 - 避免使用 INNOT IN

曾經一次去面試,被問及in與exists的區別,記得當時是這麼回答的:''in後面接子查詢或者(xx,xx,xx,,,),exists後面需要一個true或者false的結果",當然這麼說也不算錯,但別人想聽的是sql優化相關,肯定是效率的問題,只是那個時候確實不知道它們在sql優化上的區別,只知道用in會進

淺談sql中的innot in,existsnot exists的區別以及效能分析

1、in和exists in是把外表和內表作hash連線,而exists是對外表作loop迴圈,每次loop迴圈再對內表進行查詢,一直以來認為exists比in效率高的說法是不準確的。如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists,子查

MYSQL之not in優化方法:left join

MYSQL之not in優化方法:left join Author:飄易 Source: 飄易 正 文: 有一個專案,mysql 語句採用了not in,結果某些頁面開啟需要40多秒,排查sql語句後,發現是採用了 not in 語法導致全表掃描,消耗了大量的時間,飄易記錄

SQL優化案例--使用LEFT JOIN替換NOT EXISTS子查詢

轉載  在一些業務場景中,會使用NOT EXISTS語句確保返回資料不存在於特定集合,部分同事會發現NOT EXISTS有些場景效能較差,甚至有些網上謠言說”NOT EXISTS不走索引”,哪對於NOT EXISTS語句,我們如何優化呢?##=================

not innot exists 及用join改寫

/*我們接著用上次建的兩個表。資料如下*/ SQL> select * from l; STR   V ------ - left_1 1 left_2 2 left_3 3 left_4 4 SQL> select * from r; STR    V --

mysql not existsnot in對比

not exists比not in效率高 如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not exists的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。  分析: 1. select * from

詳解not innot exists的區別與用法(not in效能並不差!)

在網上搜了下關於oracle中not exists和not in效能的比較,發現沒有描述的太全面的,可能是問題太簡單了,達人們都不屑於解釋吧。於是自己花了點時間,試圖把這個問題簡單描述清楚,其實歸根結底一句話:not in效能並不比not exists差,關鍵看你用的是

oracle_not existsnot in的用法和區別

沒有 class oracl 水果 where tle select mark 顯示 (轉 飛翔-方向 積累 沈澱http://www.cnblogs.com/mytechblog/) sql中exists,not exists的用法 exists表示()內子查詢語句返回結

Oracle not in查不到應有的結果(NULL、INEXISTS詳解)

from 邏輯運算 zha order .net 提升 特點 where zhang 問題:語句1 : Select * from table1 A where A.col1 not in ( select col1 from table2

轉 [ORACLE]詳解not innot exists的區別與用法(not in的性能並不差!)

values 我們 and ons 一點 pla 出現 開始 min 在網上搜了下關於oracle中not exists和not in性能的比較,發現沒有描述的太全面的,可能是問題太簡單了,達人們都不屑於解釋吧。於是自己花了點時間,試圖把這個問題簡單描述清楚,其實歸根結底一