2011年12月26日 星期一

[MySQL]2-7表格連接用法(STRAIGHT_JOIN)

STRAIGHT_JOIN 強迫MySQL使用我們的順序去做JOIN,其JOIN結果跟INNER JOIN相同

首先先CREATE新關聯TABLE以及INSERT資料

CREATE TABLE user_order (
id bigint(20) NOT NULL AUTO_INCREMENT ,
user_id varchar(20) NOT NULL ,
order_date datetime NOT NULL,
order_status int(20) NOT NULL DEFAULT 0 COMMENT '0未確認訂單,1待付款,2已結案',
PRIMARY KEY(id),
FOREIGN KEY fk_user_order(user_id) REFERENCES user(id)
)AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO user_order (user_id, order_date, order_status )
         VALUES (1, '2011-05-21', 2),
                           (2, '2011-06-25', 2),
                           (3, '2011-09-13', 1),
                           (4, '2011-12-25', 0);

一般JOIN情況如下
SELECT *
FROM occupation
         JOIN user ON occupation.user_id = user.id
         JOIN user_order ON user_order.user_id = user.id

結果


使用EXPLAIN 來看執行順序
EXPLAIN SELECT *
FROM occupation
         JOIN user ON occupation.user_id = user.id
         JOIN user_order ON user_order.user_id = user.id
執行順序 user_order → occupation→ user

使用STRAIGHT_JOIN之後,結果相同,但執行的順序不同
SELECT *
FROM occupation
         STRAIGHT_JOIN user ON occupation.user_id = user.id
         STRAIGHT_JOIN user_order ON user_order.user_id = user.id
結果

使用EXPLAIN 來看執行順序
EXPLAIN SELECT *
FROM occupation
         STRAIGHT_JOIN user ON occupation.user_id = user.id
         STRAIGHT_JOIN user_order ON user_order.user_id = user.id

執行順序 occupation → user→ user_order


總結︰未使用STRAIGHT_JOIN使用其他JOIN MySQL會自己找尋已經有INDEX的關聯尋找先後順序做關聯表通常這會是系統最佳效能了,使用STRAIGHT_JOIN會依照撰寫者所寫的順序去JOIN,效能部份就必須撰寫者自行調效。簡而言之,如果撰寫者能把握最有效率的JOIN順序與條件,那麼就可以使用STRAIGHT_JOIN,反之則讓系統自行處理,切勿濫用。















其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...