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

SQL IN клауза по-бавна от отделните заявки

Това е известен недостатък в MySQL.

Често е вярно, че се използва UNION работи по-добре от заявка за диапазон като тази, която показвате. MySQL не използва индекси много интелигентно за изрази, използващи IN (...) . Подобна дупка съществува в оптимизатора за булеви изрази с OR .

Вижте http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ за някои обяснения и подробни показатели.

Оптимизаторът непрекъснато се подобрява. Дефицит в една версия на MySQL може да бъде подобрен в следваща версия. Така че си струва да тествате заявките си в различни версии.

Също така е изгодно да използвате UNION ALL вместо просто UNION . И двете заявки използват временна таблица за съхраняване на резултати, но разликата е, че UNION прилага DISTINCT към резултантния набор, което води до допълнително неиндексирано сортиране.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Multi-Table Join

  2. Как мога да задам сесия в базата данни codeigniter 3?

  3. Искам да конвертирам MySQL заявка в PDO?

  4. Как да направя търсене с акцент и без значение на главни и малки букви в базата данни на MediaWiki?

  5. SQL INSERT от SELECT