Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql:избор на най-ефективната заявка от двете

Няма съмнение, че версия 1 - отделни клаузи where във всяка страна на съюза - ще бъде по-бърза. Нека да разгледаме защо версията - където клаузата над резултата от обединението - е по-лоша:

  • обем на данни:винаги ще има повече редове в резултата от обединението, защото има по-малко условия за това какви редове се връщат. Това означава повече I/O на диска (в зависимост от индексите), повече временно хранилище за съхранение на набора от редове, което означава повече време за обработка
  • повторено сканиране:целият резултат от обединението трябва да бъде сканиран отново, за да се приложи условието, когато е можело да бъде обработено по време на първоначалното сканиране. Това означава двойно обработване на набора от редове, макар и вероятно в паметта, все пак е допълнителна работа.
  • индексите не се използват за клаузи where в резултат от обединение. Ако имате индекс над полетата за външен ключ и postType, няма да се използва

Ако искате максимална производителност, използвайте UNION ALL , който предава редовете направо в резултата без допълнителни разходи, вместо UNION , който премахва дубликати (обикновено чрез сортиране) и може да бъде скъп и ненужен въз основа на вашите коментари

Дефинирайте тези индекси и използвайте версия 1 за максимална производителност:

create index t1_authorID_postType on t1(authorID, postType);
create index t1_websiteID_postType on t1(websiteID, postType);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:ограничение за CASE (брой условия WHEN, THEN)

  2. Алтернатива за mysql_insert_id в mysql?

  3. Вземете най-новите данни, сравнявайки полета за дата и час от две таблици

  4. doctrine2 и group_concat

  5. Django MySQL пълно текстово търсене