MYSQL IN 與 EXISTS 的優(yōu)化示例介紹
優(yōu)化原則:小表驅(qū)動大表,即小的數(shù)據(jù)集驅(qū)動大的數(shù)據(jù)集。
############# 原理 (RBO) #####################
select * from A where id in (select id from B) 等價于: for select id from B for select * from A where A.id = B.id
當(dāng)B表的數(shù)據(jù)集必須小于A表的數(shù)據(jù)集時,用in優(yōu)于exists。
select * from A where exists (select 1 from B where B.id = A.id) 等價于 for select * from A for select * from B where B.id = A.id
當(dāng)A表的數(shù)據(jù)集系小于B表的數(shù)據(jù)集時,用exists優(yōu)于in。
注意:A表與B表的ID字段應(yīng)建立索引。
例如:
/** 執(zhí)行時間:0.313s **/ SELECT SQL_NO_CACHE * FROM rocky_member m WHERE EXISTS (SELECT 1 FROM rocky_vip_appro a WHERE m.ID = a.user_id AND a.passed = 1); /** 執(zhí)行時間:0.160s **/ SELECT SQL_NO_CACHE * FROM rocky_member m WHERE m.ID in(SELECT ID FROM rocky_vip_appro WHERE passed = 1);
not in 和not exists用法類似。
相關(guān)文章
mysql 8.0.12 安裝配置方法圖文教程(windows10)
這篇文章主要為大家詳細介紹了windows10下mysql 8.0.12 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區(qū)別整理
這篇文章主要介紹了MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區(qū)別整理,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-08-08MySQL數(shù)據(jù)庫子查詢語法規(guī)則詳解
子查詢是在查詢語句里面再嵌套一個查詢,這是因為我們在提取數(shù)據(jù)的時候有很多不知道的數(shù)據(jù)產(chǎn)生了依賴關(guān)系。本文為大家總結(jié)了一下MySQL數(shù)據(jù)庫子查詢語法規(guī)則,感興趣的可以了解一下2022-08-08