Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

Помогите с простым запросом   Найти похожие ветки 

 
Ренат ©   (2003-12-16 16:08) [0]

есть 2 таблицы a и b

__________ ____________

1 1
2 2
3
4
__________ _____________

как выбрать поля, содержащие 3 и 4 с учетом того, что обе таблицы большого размера (not in, not exists не подходит)?


 
Ega23 ©   (2003-12-16 16:11) [1]

select a.Column from a, b
where a.Column<>b.Column

Это что-ли?


 
Johnmen ©   (2003-12-16 16:17) [2]

Почему not exists не подходит ?


 
Sandman25 ©   (2003-12-16 16:28) [3]

[2] Johnmen © (16.12.03 16:17)

+ index сделать.


 
Ренат ©   (2003-12-16 16:31) [4]


> Почему not exists не подходит ?

а быстрее нельзя?


 
Reindeer Moss Eater ©   (2003-12-16 16:31) [5]

select a.Column from a, b
where a.Column<>b.Column

Это что-ли?


Это чуть меньше, чем в Декартовом произведении обеих таблиц.
То есть - не Это.


 
Sandman25 ©   (2003-12-16 16:37) [6]

[4] Ренат © (16.12.03 16:31)

Можно. Если будет индекс по связываемому полю.


 
Ренат ©   (2003-12-16 16:38) [7]

в обеих таблицах?


 
Ega23 ©   (2003-12-16 16:41) [8]


> Это чуть меньше, чем в Декартовом произведении обеих таблиц.

А записей сколько? Порядок?


 
Reindeer Moss Eater ©   (2003-12-16 16:44) [9]

Ega23 © (16.12.03 16:41) [8]

> Это чуть меньше, чем в Декартовом произведении обеих таблиц.

А записей сколько? Порядок?


Твой запрос вернет
1
2
3
3
4
4


 
NickBat ©   (2003-12-16 16:45) [10]

Такое подойдет? Работает вроде бы быстро.

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) [11]

около 10 тыс. в обеих таблицах interbase


 
Johnmen ©   (2003-12-16 17:08) [12]

>Ренат © (16.12.03 16:45)

Это мелочь...:)


 
Ega23 ©   (2003-12-16 17:11) [13]


> Твой запрос вернет
> 1
> 2
> 3
> 3
> 4
> 4

Точно. Тогда через join


 
Ega23 ©   (2003-12-16 17:13) [14]

Кстати, а почему not in не подходит:

Select distinct Column1
from a
where Column1 not in
(Select distinct Column1 from b)
?


 
Sandman25 ©   (2003-12-16 17:28) [15]

[7] Ренат © (16.12.03 16:38)
в обеих таблицах?

Нет, только в той, что в Exists.


 
Johnmen ©   (2003-12-16 17:38) [16]

>Ренат ©

Вариантов несколько
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), пожалуй, самый медленный.
Вобщем, проверяй сам...


 
JibSkeart ©   (2003-12-16 17:39) [17]

Ага и еще посмотреть план выполнения :)


 
Ega23 ©   (2003-12-16 17:51) [18]


> Запрос с IN, Ega23 © (16.12.03 17:13), пожалуй, самый
> медленный.

Можно ещё медленней придумать :-)



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
6-37841
Dmitriy_R
2003-11-13 09:17
2004.01.13
ServerSocket и THread


14-37875
race1
2003-12-22 15:18
2004.01.13
чайники


3-37577
Mikka
2003-12-14 14:20
2004.01.13
Сервер БД SQL Server


1-37787
garik86
2003-12-29 12:28
2004.01.13
Русификация сообщений об ошибках


14-37923
MadDiger
2003-12-20 13:21
2004.01.13
Delphi8