powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про эффективность запросов, наверное OFF, но очень надо :)
4 сообщений из 4, страница 1 из 1
Вопрос про эффективность запросов, наверное OFF, но очень надо :)
    #32033061
Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как быстрее: объединить таблицы или поставить лишние проверки?

Собственно, вопрос такой:
Пусть есть две таблицы - таблица стран и таблица городов.
Каждому городу приписан id страны, в которой годо находится.
Пусть еще есть таблица гостиниц, каждой гостинице приписан id
города.
Предыдущим запросом я выбрал все города, которые находятся в
конкретной стране (это делается в любом случае).
Теперь мне нужно сделать выборку гостиниц, которые находятся
в этой же стране. Есть соответственно два способа, с объединением 3 таблиц и 2 таблиц с более мощным условием.

SELECT hotels.name
FROM hotels, cities
WHERE hotels.city_id = cities.city_id AND cities.country_id = ID-нужной-страны;

или:

SELECT hotels.name
FROM hotels
WHERE hotels.city_id = ID-города-1-в-нужной стране OR hotels.city_id = ID-города-2-в-нужной-стране OR hotels.city_id = ID-города-3-в-нужной-стране;

Как сделать лучше? Основное требование - скорость, база данных скорее всего Access. Или может я вообще неправильно
организовал таблицы для этой задачи? :)
...
Рейтинг: 0 / 0
Вопрос про эффективность запросов, наверное OFF, но очень надо :)
    #32033082
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос не имеет однозначного ответа. Очень много переменных величин. Основной критерий - это практика.

Т.е. сделай оба варианта на конкретной базе данных с заведомо большим числом записей и посмотри, что будет быстрее.

Для очень грубой оценки не учитывающей оптимизацию запросов и использование индексов можно прикинуть общее количество записей, которое необходимо обработать.

Например, у тебя 10 стран (10 записей), в каждой стране 10 городов (100 записей) и в каждом городе 10 гостиниц (1000 записей).

Если использовать все 3 таблицы в одном запросе, то необходимо обработать 10*100*1000=1 000 000 записей

Если делать 2 последовательных запроса, то необходимо обработать в первом запросе 10*100=1 000 записей. В результате пусть окажутся те же 10 городов, тогда во втором запросе 10*1000=10 000. Итого 1000+10000=11 000

Т.е. при использовании 2 последовательных запросов необходимо обработать примерно в 100 раз меньше записей чем при использовании 1 запроса.

Однако, эта оценка применительно к скорости выборки весьма приблизительна, поскольку не учитывает использование индексов. При использовании одного запроса все индексы задействованы, а при использовании 2 последовательных таблиц у промежуточной таблицы нет индекса. И что тут перевесит: уменьшение количества записей или использование индекса зависит от конкретной задачи и средства разработки.
...
Рейтинг: 0 / 0
Вопрос про эффективность запросов, наверное OFF, но очень надо :)
    #32033115
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем так, точнее совсем не так...
Второй вариант мне, лично, вообще непонятен: а что делать если городов будет 100 или 1000?
Первый вариант абсолютно нормальный, не заморачивайте себе и другим головы. А про 1 000 000 записей в предыдущем ответе - почитайте как SQL сервера делают планы запросов и для чего они (планы) нужны...
...
Рейтинг: 0 / 0
Вопрос про эффективность запросов, наверное OFF, но очень надо :)
    #32033117
Фотография Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы на самом деле сделал следующее:

У таблицы стран первичным ключом сделал CountryID.
У таблицы городов первичным ключом сделал CountryID, CityID с Foreign Key на таблицу стран через CountryID.
Соответственно, у таблицы гостиниц делается первичный ключ на CountryID, CityID, HotelID и Foreign key на таблицу гостиниц через CountryID, CityID.
Все первичные ключи делаются кластерными. В таком случае производительность будет наилучшей.

-- Слон
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про эффективность запросов, наверное OFF, но очень надо :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]