2010-11-12 112 views
2

顧名思義,與多個或將查詢更快或查詢與多個查詢加入聯盟會更快?我只加入了兩個表格,使其變得簡單,但可以有更多的表格加入。查詢多個或vs聯合多個查詢,哪一個會更快?

例如,

select isbn, booktitle from book as b left join publisher as p 
     on b.publisherid = p.publisherid 
     where 
      booktitle like '%mysql%' or 
      isbn like '%mysql%' or 
      publishername like '%mysql%' 

VS

 select isbn, booktitle from book as b left join publisher as p 
    on b.publisherid = p.publisherid 
    where 
    booktitle like '%mysql%' 
    union 
    select isbn, booktitle from book as b left join publisher as p 
    on b.publisherid = p.publisherid 
    where 
    isbn like '%mysql%' 
    union 
    select isbn, booktitle from book as b left join publisher as p 
    on b.publisherid = p.publisherid 
    where 
    publishername like '%mysql%' 
+0

你爲什麼不自己嘗試一下,並找出,然後你可以問我們:「我發現第一個查詢在第二個的一半的時間執行查詢。有人可以解釋嗎?「 – 2013-04-17 04:29:03

+0

如果您的國際標準書號(ISBN)字段中有任何「mysql」,那麼您就會遇到一些非常糟糕的數據問題。 – 2013-04-17 04:29:19

回答

0

我怎麼沒看到你的工會的會更快。您必須掃描並加入3次,與第一次一樣,您只掃描一次,對於每個加入的記錄,您都可以應用這些條件。

0

由於您只查詢一次數據,因此效率最高的一個會更有效率。也就是說,如果您查詢的是不會返回的數據,則最好將這些條件放入WHEREIN子句中。在您提供的例子,它是這樣的:

SELECT isbn, booktitle 
FROM book as b 
WHERE 
    booktitle LIKE '%mysql%' or 
    isbn like '%mysql%' or 
    b.publisherid in (SELECT publisherid FROM publisher WHERE publishername like '%mysql%') 

隨着過濾柱正確的索引(PUBLISHERNAME,在這種情況下),MySQL將優化每個部件和更有效地將它們結合起來。