Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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
-
если под эффективностью понимается скорость выборки, то можешь сам простестировать и нам рассказать.
А ввобще по логике второй должен быть быстрее
-
а сделать тест слабо?
а ты запросы как пишешь? вручную?
первый запрос не закончен? напиши его полностью.
и теперь внимание вопрос: какой запрос будет эффективнее?
-
FANTAzeRus:
id BETWEEN 1 and 100
=
id >=1 AND id <= 100
http://www.mysql.com/documentation/maxdb/85/16665bc71b11d2a97100a0c9449261/content.htm
ИМХО BETWEEN работать будет быстрее
-
FANTAzeRus
Это тебе кажется, что два твои запроса одинаковые.
И дело не в скорости, а в том, что они выберут тебе разные результаты (не всегда, но возможно)
-
pauk
только в том случае если диапазон используемый в BETWEEN не равен множеству, перечисленному в IN
http://www.mysql.com/doc/en/Comparison_Operators.html
-
А диапазон, кажется, не может быть равен множеству.
-
pauk
может если элементы диапазона могут составлять конечное множество (целые числа например)
вещественные числа строго говоря не могут составить конечного множества
(в диапазоне [0,10] 10 целых чисел и бесконечное множество вещественных)
-
pauk
в принципе выражение y IN(x1,x2,x3,...xN)
можно развернуть в контруцию вида
y = x1 OR y = x2 OR y = x3 OR ... y = xN
-
(целые числа например)
При целых - да, может, но в условии первого поста об этом не сказано
в диапазоне [0,10] 10 целых чисел и бесконечное множество вещественных
11 ;)
Я вовсе не спорить собираюсь.
Просто хотел сказать, что два запроса
FANTAzeRus могут дать два разных результата. И конструкции IN и
BETWEEN сравнивать ему не следует.
У каждой свое применение. :)
-
ой, здается мне что выбор из неупорядоченного множества происходит медленнее, нежели из упорядоченного.
-
USE
в общем случае не факт
-
не факт, что не медленнее. но факт, что не быстрее.
-
USE
1. Зависит от алгоритма перебора
2. Зависит в общем случае от входных данных
-
в даном случае: у нас есть числа от 1 до 100. в первом случае надо сравнить идентификатор с каждым элементом (или до того времени, пока не получим совпадение). хотя возможно это заблуждение и при получении множества данных они каким-то способом сортируются. а во втором случае надо сравнить с первым элементом диапазона и со вторым, соответственно определим факт наличия элемента множеству.
хотя, повторюсь, возможно алгоритм перебора мудрый.