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

Има ли разлика в производителността между BETWEEN и IN с MySQL или в SQL като цяло?

BETWEEN трябва превъзхожда IN в този случай (но направете измервайте и проверявайте и плановете за изпълнение!), особено като n расте и като статистиката все още е точна. Да предположим:

  • m е размерът на вашата маса
  • n е размерът на вашия диапазон

Може да се използва индекс (n е малко в сравнение с m )

  • На теория BETWEEN може да се реализира с едно "сканиране на диапазон" (Oracle speak) на индекса на първичния ключ и след това преминаване най-много n индексни листни възли. Сложността ще бъде O(n + log m)

  • IN обикновено се изпълнява като серия (цикл) от n "сканиране на диапазон" на индекса на първичния ключ. С m тъй като размерът на таблицата е, сложността винаги ще бъде O(n * log m) ... което винаги е по-лошо (незначително за много малки таблици m или много малки диапазони n )

Индексът не може да се използва (n е значителна част от m )

Във всеки случай ще получите пълно сканиране на таблицата и ще оцените предиката на всеки ред:

  • BETWEEN трябва да оцени два предиката:един за долната и един за горната граница. Сложността е O(m)

  • IN трябва да оцени най-много n предикати. Сложността е O(m * n) ... което отново винаги е по-лошо, или може би O(m) ако базата данни може да оптимизира IN списък да бъде хеш-карта, а не списък с предикати.



  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 на друг сървър

  2. Мога ли да използвам подзаявка в израз INSERT?

  3. Последен индекс на даден подниз в MySQL

  4. MySQL сървърът изчезна с Ruby on Rails

  5. brew услуги:къде да редактирам конфигурацията?