![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация запроса [D6, dBase, FoxPro]
PaulSin © (2003-06-03 08:56:00)Есть две таблицы. Нужно выбрать записи к примеру из первой таблицы которых нет во второй таблице. Запрос Select a.a,a.b,a.c from a where a.a not in (select f from e) работает долго. Есть соображения по оптимизации ?
в подзапросе таблица меньшая по размеру(2,5 М), в первой части запроса таблица размером 6 М.
PaulSin (2003-06-03 09:40:00) [1]Всем принимавшим участие в оптимизации ПАСИБО!!!!!
paulsin (2003-06-03 09:37:00) [2]Первый вариант лучше
Соловьев (2003-06-03 09:28:00) [3]
> Johnmen © (03.06.03 09:26
:)
Соловьев (2003-06-03 09:27:00) [4]А так?
select t1.*
from table1 t1
left join table2 t2 on t1.id=t2.id
where t2.id is NULL
Johnmen (2003-06-03 09:26:00) [5]>stone © (03.06.03 09:14)
Ничего подобного. Классическая классика вот это :
SELECT ...
FROM a
LEFT JOIN b ON a.id=b.id
WHERE b.id IS NULL
paulsin (2003-06-03 09:23:00) [6]Великолепно !!!!!
> Dan (03.06.03 09:14)
> т.е. по а.а ? я не знаю движка dbase, но попробуй сделать
> индекс по e.f и переписать запрос так:
> SELECT a.a, a.b, a.c
> FROM a
> WHERE NOT EXISTS(
> SELECT *
> FROM e
> WHERE f=a.a)
>
>
> stone © (03.06.03 09:14)
> Это классичечкий пример:
> Select * from a where not exists(select * from e where a.a
> = e.a)
Dan (2003-06-03 09:14:00) [7]т.е. по а.а ? я не знаю движка dbase, но попробуй сделать индекс по e.f и переписать запрос так:
SELECT a.a, a.b, a.c
FROM a
WHERE NOT EXISTS(
SELECT *
FROM e
WHERE f=a.a)
stone (2003-06-03 09:14:00) [8]Это классичечкий пример:
Select * from a where not exists(select * from e where a.a = e.a)
paulsin (2003-06-03 09:10:00) [9]По первой таблице по полю которое ищу во второй таблице
paulsin (2003-06-03 09:09:00) [10]локалка dBaseIV
Dan (2003-06-03 09:08:00) [11]и какие индексы есть ?
Dan (2003-06-03 09:07:00) [12]На какой СУБД пишешь ?