запрос с несколькими или против объединения нескольких запросов, какой из них будет быстрее? - PullRequest
2 голосов
/ 12 ноября 2010

Как следует из названия, запрос с множественным или будет быстрее или запрос с множественным запросом, объединенным с объединением , будет быстрее?Для простоты я объединил только две таблицы, но в соединении может быть больше таблиц.

, например,

    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%'  

против

      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%'  

Ответы [ 3 ]

0 голосов
/ 30 апреля 2011

Верхний будет более эффективным, так как вы запрашиваете данные только один раз.Тем не менее, если вы запрашиваете данные, которые вы не будете возвращать, еще лучше поместить эти критерии в предложение IN в WHERE.В приведенном вами примере это будет выглядеть следующим образом:

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%')

При наличии правильных индексов для столбцов фильтрации (в данном случае, pubshername) MySQL оптимизирует каждый фрагмент и объединит их гораздо эффективнее.

0 голосов
/ 12 ноября 2010

Я не понимаю, как ваш профсоюз будет быстрее.Вам приходится сканировать и присоединяться 3 раза, причем, как и в первом, вы сканируете только один раз, и для каждой присоединенной записи вы можете применять критерии.

...