powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
13 сообщений из 13, страница 1 из 1
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019570
Фотография XDefender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот к примеру есть:

UPDATE FacturesTVA
SET State=2 -- Освобождаем
WHERE ID IN (SELECT NumberTVA FROM INSERTED)

С Инер джоин выглядит так

UPDATE FacturesTVA
SET State=2 -- Освобождаем
FROM FacturesTVA F INNER JOIN INSERTED I ON WHERE F.ID=I.NumberTVA

Причем при условии, что в FacturesTVA окола 8000 записей, а в INSERTED в 95% 1 запись ?
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019574
Подозреваю, что планы будет практически идентичны.
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019584
SergeK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На мой взгляд полезно иметь тестовый сервер, который послабже боевого по производительности, и на нем и смотреть Execution Plan каждого запроса. Естессно, чтобы данных было столько же, сколько и на боевом. Иначе на практически пустой базе разницы можно и не заметить.
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019585
Alex_open_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю, что планы будут одинаковы, если все в порядке с индексной статистикой. Запросы в принципе тривиальны и наверняка подходят под типовые шаблоны выполнения
Я наблюдал расхождение в планах подобного рода запросов, когда внутри IN был подзапрос из временной таблицы или количество таблиц в запросе было дастаточно велико (от 10).

А как известно, если в запросе более 16 таблиц (касательно 7 сервера), то там уж как фишки лягут....
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019616
SoNiKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если так:

UPDATE FacturesTVA
SET State=2 -- Освобождаем
WHERE ID exists (SELECT NumberTVA FROM INSERTED)
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019617
SoNiKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот ещё вариантик:

UPDATE FacturesTVA
SET State=2 -- Освобождаем
FROM INSERTED
WHERE ID = NumberTVA
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019649
Вот с этим запросом:

UPDATE FacturesTVA
SET State=2 -- Освобождаем
WHERE ID IN (SELECT NumberTVA FROM INSERTED)

будут труднопонимаемые проблемы на sql2000, если NumberTVA в Inserted поимеет хотя бы одно значение NULL. У меня на лбу здоровенная шишка от этой грабли.
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019681
Alex_open_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Касательно предыдущего замечания - я также иногда замечал, что INNER соединение по NULL полям (то есть отсутствие соединения как такового) губительно сказывается на плане выполнения, если записей с NULL довольно много и оптимизатору это известно.
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019878
a) NULL-поля всегда отрицательно сказываются на качестве работы оптимизатора;
б) Использование INNER JOIN вместо IN в общем случае - неважно, а иногда неверно;
в) Быстрее IN всегда предложение EXISTS.

Вот типичная запись в IN:
TABLE1.ID IN (SELECT ID FROM TABLE2)

Вот более быстрая запись в EXISTS:
EXISTS(SELECT TOP 1 1 FROM TABLE2 WHERE (TABLE2.ID = TABLE1.ID))

Замечания:
1) Почему-то SQL Server не всегда понимает, что достаточно найти любую запись для истинности EXISTS, поэтому мы ставим TOP 1 (обычно помогает в случае неуникальности).
2) Выборка константы здесь быстрее, чем выборка поля. Тоже недоделка оптимизатора.
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019884
> 1) Почему-то SQL Server не всегда понимает, что достаточно найти любую запись для истинности EXISTS, поэтому мы ставим TOP 1 (обычно помогает в случае неуникальности).

Это справедливо только для 7.0 из-за недоделки оптимизатора. В 2000 исправлено и TOP уже писать не нужно, будет безразлично.

> 2) Выборка константы здесь быстрее, чем выборка поля. Тоже недоделка оптимизатора.

Это утверждение не находит подверждения. Широко распространенный миф.
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019887
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Красивые у Акжана рассуждения про EXISTS(SELECT TOP 1 1 ..., но истина дороже

Subqueries with EXISTS

When a subquery is introduced with the keyword EXISTS, it functions as an existence test. The WHERE clause of the outer query tests for the existence of rows returned by the subquery. The subquery does not actually produce any data; it returns a value of TRUE or FALSE.

Так что писать SELECT TOP 1 1 - это самообман, разницы с select * никакой нет, выборки никаких данных не происходит
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019888
У Вас также красивые с точки зрения теории рассуждения. Есть только одна просьба - проверьте их на реальном сервере.

Просьба только проверять мои варианты на неуникальном индексе. Вот тогда и посмотрим, равны ли по производительнсти варианты с EXISTS(SELECT "FolderAccountId") и с EXISTS(SELECT TOP 1 1)...

Боюсь, что Вы будете удивлены. Кстати, аналогичные моим выводы сделал на своей БД Анатолий Тенцер. TOP 1 реально крайне нужен при выборке на неуникальном индексе, и может быть опущен при выборке по уникальному индексу.
...
Рейтинг: 0 / 0
Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
    #32019890
Вынужден тут же сам себя поправить:
Как оказалось, в SQL Server 2000 Service Pack 1 эту проблему оптимизатора решили. Все запросы выдают один и тот же план, по крайней мере, для моихтестовых запросов.

В SQL Server 2000 без сервис паков эта проблема имеет место быть (у нас есть несколько серверов, без SP, с SP1 и с SP2).
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что лучше и быстрее, испольование IN или INNER JOIN ? (MS SQL 2000)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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