Глупый вопрос по формированию запроса

xdx

Есть таблица и там есть несколько полей (15) мне надо организовать поиск по двум полям.Если ищу отдельно только по каждому полю - находит мгновенно (0,0001 сек)В таблице 1 млн. записей.По первому условию находит 250 записейПо второму находит 4 записи.Но стоит мне написать в условии
Field1=xxxxxxxx OR Field2=zzzzzzzzzzzzzz
Запрос начинает выполняться 60-90 сек.В чем может быть причина?Неужели серверу трудно прибавить найденные 250+4 записи :-)
7 ответов

xdx

xdx,а план посмотреть? Там все очень хорошо видно


xdx

SELECT .... FROM .... WHERE Field1=xxxxxxxx
UNION ALL
SELECT .... FROM .... WHERE Field2=zzzzzzzzzzzzzz


xdx

Неужели серверу трудно прибавить найденные 250+4 записи :-)
Не факт что он должен "прибавить"Разве наборы всегда будут непересекающиеся?


xdx

SELECT .... FROM .... WHERE Field1=xxxxxxxx
UNION ALL
SELECT .... FROM .... WHERE Field2=zzzzzzzzzzzzzz
Точнее
SELECT .... FROM .... WHERE Field1=xxxxxxxx
UNION ALL
SELECT .... FROM .... WHERE (Field1 IS NULL OR Field1<>xxxxxxxx) AND Field2=zzzzzzzzzzzzzz


xdx

Бред какой-то, но запрос вида
SELECT DISTINCT * FROM
(
SELECT * FROM TABLE1 WHERE Field1=xxxxxxxx
 UNION
SELECT * FROM TABLE1 WHERE Field2=zzzzzzzzzzzzzz
) AS list
отрабатывает раз в 100 быстрее, чем
SELECT * FROM TABLE1 WHERE Field1=xxxxxxxx OR Field2=zzzzzzzzzzzzzz
Хотя по логике должно быть вроде как наоборот?


xdx

DISTINCT после UNION ?оригинально...


xdx

DISTINCT после UNION ?оригинально...
Он его проигнорит, так что ничего особо страшного, хотя и странно выглядит.
Бред какой-то, но запрос вида
SELECT DISTINCT * FROM
(
SELECT * FROM TABLE1 WHERE Field1=xxxxxxxx
 UNION
SELECT * FROM TABLE1 WHERE Field2=zzzzzzzzzzzzzz
) AS list
отрабатывает раз в 100 быстрее, чем
SELECT * FROM TABLE1 WHERE Field1=xxxxxxxx OR Field2=zzzzzzzzzzzzzz
Хотя по логике должно быть вроде как наоборот?
Посмотрите планы - думаю все станет понятно.