Forum Webscript.Ru

Общие => Базы данных => Тема начата: FANTAzeRus от 18 Марта 2004, 10:28:12

Название: BETWEEN и IN
Отправлено: FANTAzeRus от 18 Марта 2004, 10:28:12
Какой запрос будет эффективнее:

SELECT * FROM TABLE WHERE id IN(1,2,3,... 100)
или
SELECT * FROM TABLE WHERE id BETWEEN 1 and 100
Название: BETWEEN и IN
Отправлено: Макс от 18 Марта 2004, 12:13:15
если под эффективностью понимается скорость выборки, то можешь сам простестировать и нам рассказать.

А ввобще по логике второй должен быть быстрее
Название: BETWEEN и IN
Отправлено: USE от 18 Марта 2004, 12:13:18
а сделать тест слабо?
а ты запросы как пишешь? вручную?
первый запрос не закончен? напиши его полностью.

и теперь внимание вопрос: какой запрос будет эффективнее?
Название: BETWEEN и IN
Отправлено: ThE0ReTiC от 18 Марта 2004, 12:40:42
Цитировать
FANTAzeRus:
id BETWEEN 1 and 100

=

id >=1 AND id <= 100

http://www.mysql.com/documentation/maxdb/85/16665bc71b11d2a97100a0c9449261/content.htm
ИМХО BETWEEN работать будет быстрее
Название: BETWEEN и IN
Отправлено: pauk от 19 Марта 2004, 11:43:23
FANTAzeRus
Это тебе кажется, что два твои запроса одинаковые.
И дело не в скорости, а в том, что они выберут тебе разные результаты (не всегда, но возможно)
Название: BETWEEN и IN
Отправлено: ThE0ReTiC от 19 Марта 2004, 11:51:23
pauk
только в том случае если диапазон используемый в BETWEEN не равен множеству, перечисленному в IN
http://www.mysql.com/doc/en/Comparison_Operators.html
Название: BETWEEN и IN
Отправлено: pauk от 19 Марта 2004, 14:55:38
А диапазон, кажется, не может быть равен множеству.
Название: BETWEEN и IN
Отправлено: ThE0ReTiC от 19 Марта 2004, 15:12:07
pauk
может если элементы диапазона могут составлять конечное множество (целые числа например)
вещественные числа строго говоря не могут составить конечного множества
(в диапазоне [0,10] 10 целых чисел и бесконечное множество вещественных)
Название: BETWEEN и IN
Отправлено: ThE0ReTiC от 19 Марта 2004, 15:15:05
pauk
в принципе выражение y IN(x1,x2,x3,...xN) можно развернуть в контруцию вида

y = x1 OR y = x2 OR y = x3 OR ... y = xN
Название: BETWEEN и IN
Отправлено: pauk от 19 Марта 2004, 15:30:35
Цитировать
(целые числа например)

При целых - да, может, но в условии первого поста  об этом не сказано

Цитировать
в диапазоне [0,10] 10 целых чисел и бесконечное множество вещественных

11 ;)

Я вовсе не спорить собираюсь.
Просто хотел сказать, что два запроса
FANTAzeRus  могут дать два разных результата. И конструкции IN и
BETWEEN сравнивать ему не следует.
У каждой свое применение. :)
Название: BETWEEN и IN
Отправлено: USE от 19 Марта 2004, 16:16:48
ой, здается мне что выбор из неупорядоченного множества происходит медленнее, нежели из упорядоченного.
Название: BETWEEN и IN
Отправлено: ThE0ReTiC от 19 Марта 2004, 16:32:15
USE
в общем случае не факт
Название: BETWEEN и IN
Отправлено: USE от 19 Марта 2004, 19:09:44
не факт, что не медленнее. но факт, что не быстрее.
Название: BETWEEN и IN
Отправлено: ThE0ReTiC от 19 Марта 2004, 19:12:34
USE
1. Зависит от алгоритма перебора
2. Зависит в общем случае от входных данных
Название: BETWEEN и IN
Отправлено: USE от 19 Марта 2004, 19:41:09
в даном случае: у нас есть числа от 1 до 100. в первом случае надо сравнить идентификатор с каждым элементом (или до того времени, пока не получим совпадение). хотя возможно это заблуждение и при получении множества данных они каким-то способом сортируются. а во втором случае надо сравнить с первым элементом диапазона и со вторым, соответственно определим факт наличия элемента множеству.
хотя, повторюсь, возможно алгоритм перебора мудрый.