程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL IN 與 EXISTS 的優化示例引見

MYSQL IN 與 EXISTS 的優化示例引見

編輯:MySQL綜合教程

MYSQL IN 與 EXISTS 的優化示例引見。本站提示廣大學習愛好者:(MYSQL IN 與 EXISTS 的優化示例引見)文章只能為提供參考,不一定能成為您想要的結果。以下是MYSQL IN 與 EXISTS 的優化示例引見正文


優化准繩:小表驅動年夜表,即小的數據集驅動年夜的數據集。

############# 道理 (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

當B表的數據集必需小於A表的數據集時,用in優於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

當A表的數據集系小於B表的數據集時,用exists優於in。

留意:A表與B表的ID字段應樹立索引。

例如:

/** 履行時光: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);
/** 履行時光: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用法相似。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved