Re[5]: SQL запрос к ODBC
От: VVV Россия  
Дата: 13.12.01 14:56
Оценка:
Здравствуйте Lexey, Вы писали:

L>Здравствуйте VVV, Вы писали:


VVV>>Здравствуйте Lexey, Вы писали:


L>>>Здравствуйте VVV, Вы писали:


VVV>>>>1) может быть такая штука ускорит запрос

VVV>>>>... WHERE 0=(SELECT COUNT(*) FROM T1 WHERE (T2.Ф=T1.Ф) AND (T2.И=T1.И) AND (T2.О=T1.О))

L>>>Едва-ли, скорее наоборот замедлит (если оптимизатор не разберется).


VVV>>ну уж не замедлит — это точно.


L>Аргументы в студию?

L>Обратные аргументы: IN (SELECT ...) — SELECT выполняется всего один раз, потом просто идет сравнение хешей. Здесь же на каждую строку из T2 идет подзапрос по T1, что однозначно медленнее. Впрочем, это голое теоретизирование. Умный оптимизатор скорее всего сведет все к одному и тому же плану.

Ну теория, так теория
Отчего же в IN (SELECT ...) SELECT выполняется один раз??? Ведь для каждой Ф(И,О) из Т2 мы должны это сделать (к тому же там всё соединяется по OR, что плохо оптимизируется, а у меня по AND, что оптимизируется замечательно, ибо каждый следующий подзапрос будет происходить уже по подвыборке). Или не так? К тому же, опыт показывает, что запрос SELECT COUNT(*) выполняется быстрее, чем аналогичный без COUNT — видимо таковы внутренности драйвера (хотя это я проверял много лет назад, но впечатление осталось )
Теория без практики — не теория Предлагаю VVS опубликовать результаты, что, несомненно, будет очень полезно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.