![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с простым запросом
Ренат © (2003-12-16 16:08:00)
есть 2 таблицы a и b
__________ ____________
1 1
2 2
3
4
__________ _____________
как выбрать поля, содержащие 3 и 4 с учетом того, что обе таблицы большого размера (not in, not exists не подходит)?
Ega23 (2003-12-16 17:51:00) [1]
> Запрос с IN, Ega23 © (16.12.03 17:13), пожалуй, самый
> медленный.
Можно ещё медленней придумать :-)
JibSkeart (2003-12-16 17:39:00) [2]
Ага и еще посмотреть план выполнения :)
Johnmen (2003-12-16 17:38:00) [3]
>Ренат ©
Вариантов несколько
1. С помощью соединения, NickBat © (16.12.03 16:45)
2. С помощью подзапроса с EXISTS (уже говорили)
3.SELECT A.Column FROM A
WHERE NOT (A.Column = SOME (SELECT B.Column FROM B))
Какой из них быстрее - зависит не только от наличия индексов, Sandman25 © (16.12.03 16:28), но и от содержимого таблиц.
Запрос с IN, Ega23 © (16.12.03 17:13), пожалуй, самый медленный.
Вобщем, проверяй сам...
Sandman25 (2003-12-16 17:28:00) [4]
[7] Ренат © (16.12.03 16:38)
в обеих таблицах?
Нет, только в той, что в Exists.
Ega23 (2003-12-16 17:13:00) [5]
Кстати, а почему not in не подходит:
Select distinct Column1?
from a
where Column1 not in
(Select distinct Column1 from b)
Ega23 (2003-12-16 17:11:00) [6]
> Твой запрос вернет
> 1
> 2
> 3
> 3
> 4
> 4
Точно. Тогда через join
Johnmen (2003-12-16 17:08:00) [7]
>Ренат © (16.12.03 16:45)
Это мелочь...:)
NickBat (2003-12-16 16:45:00) [8]
Такое подойдет? Работает вроде бы быстро.
select
t1.TF,
t1.F1,
t1.F2
from TEST t1
left join test2 t2 on t1.f1=t2.f1
where t2.f1 is null
Ренат (2003-12-16 16:45:00) [9]
около 10 тыс. в обеих таблицах interbase
Reindeer Moss Eater (2003-12-16 16:44:00) [10]
Ega23 © (16.12.03 16:41) [8]
> Это чуть меньше, чем в Декартовом произведении обеих таблиц.
А записей сколько? Порядок?
Твой запрос вернет
1
2
3
3
4
4
Ega23 (2003-12-16 16:41:00) [11]
> Это чуть меньше, чем в Декартовом произведении обеих таблиц.
А записей сколько? Порядок?
Ренат (2003-12-16 16:38:00) [12]
в обеих таблицах?
Sandman25 (2003-12-16 16:37:00) [13]
[4] Ренат © (16.12.03 16:31)
Можно. Если будет индекс по связываемому полю.
Reindeer Moss Eater (2003-12-16 16:31:00) [14]
select a.Column from a, b
where a.Column<>b.Column
Это что-ли?
Это чуть меньше, чем в Декартовом произведении обеих таблиц.
То есть - не Это.
Ренат (2003-12-16 16:31:00) [15]
> Почему not exists не подходит ?
а быстрее нельзя?
Sandman25 (2003-12-16 16:28:00) [16]
[2] Johnmen © (16.12.03 16:17)
+ index сделать.
Johnmen (2003-12-16 16:17:00) [17]
Почему not exists не подходит ?
Ega23 (2003-12-16 16:11:00) [18]
select a.Column from a, b
where a.Column<>b.Column
Это что-ли?