2010-11-12 121 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将优化每个部件和更有效地将它们结合起来。