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списък да бъде хеш-карта, а не списък с предикати.