Автор Тема: BETWEEN и IN  (Прочитано 5970 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн FANTAzeRus

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 93
  • +0/-0
  • 0
    • Просмотр профиля
BETWEEN и IN
« : 18 Марта 2004, 10:28:12 »
Какой запрос будет эффективнее:

SELECT * FROM TABLE WHERE id IN(1,2,3,... 100)
или
SELECT * FROM TABLE WHERE id BETWEEN 1 and 100

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
BETWEEN и IN
« Ответ #1 : 18 Марта 2004, 12:13:15 »
если под эффективностью понимается скорость выборки, то можешь сам простестировать и нам рассказать.

А ввобще по логике второй должен быть быстрее
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
BETWEEN и IN
« Ответ #2 : 18 Марта 2004, 12:13:18 »
а сделать тест слабо?
а ты запросы как пишешь? вручную?
первый запрос не закончен? напиши его полностью.

и теперь внимание вопрос: какой запрос будет эффективнее?
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
BETWEEN и IN
« Ответ #3 : 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 работать будет быстрее
AS IS...

Оффлайн pauk

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 0
    • Просмотр профиля
    • http://tax-free.pp.ua/
BETWEEN и IN
« Ответ #4 : 19 Марта 2004, 11:43:23 »
FANTAzeRus
Это тебе кажется, что два твои запроса одинаковые.
И дело не в скорости, а в том, что они выберут тебе разные результаты (не всегда, но возможно)
Hi!

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
BETWEEN и IN
« Ответ #5 : 19 Марта 2004, 11:51:23 »
pauk
только в том случае если диапазон используемый в BETWEEN не равен множеству, перечисленному в IN
http://www.mysql.com/doc/en/Comparison_Operators.html
AS IS...

Оффлайн pauk

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 0
    • Просмотр профиля
    • http://tax-free.pp.ua/
BETWEEN и IN
« Ответ #6 : 19 Марта 2004, 14:55:38 »
А диапазон, кажется, не может быть равен множеству.
Hi!

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
BETWEEN и IN
« Ответ #7 : 19 Марта 2004, 15:12:07 »
pauk
может если элементы диапазона могут составлять конечное множество (целые числа например)
вещественные числа строго говоря не могут составить конечного множества
(в диапазоне [0,10] 10 целых чисел и бесконечное множество вещественных)
AS IS...

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
BETWEEN и IN
« Ответ #8 : 19 Марта 2004, 15:15:05 »
pauk
в принципе выражение y IN(x1,x2,x3,...xN) можно развернуть в контруцию вида

y = x1 OR y = x2 OR y = x3 OR ... y = xN
AS IS...

Оффлайн pauk

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 0
    • Просмотр профиля
    • http://tax-free.pp.ua/
BETWEEN и IN
« Ответ #9 : 19 Марта 2004, 15:30:35 »
Цитировать
(целые числа например)

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

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

11 ;)

Я вовсе не спорить собираюсь.
Просто хотел сказать, что два запроса
FANTAzeRus  могут дать два разных результата. И конструкции IN и
BETWEEN сравнивать ему не следует.
У каждой свое применение. :)
Hi!

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
BETWEEN и IN
« Ответ #10 : 19 Марта 2004, 16:16:48 »
ой, здается мне что выбор из неупорядоченного множества происходит медленнее, нежели из упорядоченного.
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
BETWEEN и IN
« Ответ #11 : 19 Марта 2004, 16:32:15 »
USE
в общем случае не факт
AS IS...

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
BETWEEN и IN
« Ответ #12 : 19 Марта 2004, 19:09:44 »
не факт, что не медленнее. но факт, что не быстрее.
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
BETWEEN и IN
« Ответ #13 : 19 Марта 2004, 19:12:34 »
USE
1. Зависит от алгоритма перебора
2. Зависит в общем случае от входных данных
AS IS...

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
BETWEEN и IN
« Ответ #14 : 19 Марта 2004, 19:41:09 »
в даном случае: у нас есть числа от 1 до 100. в первом случае надо сравнить идентификатор с каждым элементом (или до того времени, пока не получим совпадение). хотя возможно это заблуждение и при получении множества данных они каким-то способом сортируются. а во втором случае надо сравнить с первым элементом диапазона и со вторым, соответственно определим факт наличия элемента множеству.
хотя, повторюсь, возможно алгоритм перебора мудрый.
Не ходите, дети, без «Мозиллы» дальше localhost!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28