Вопрос скорости
- From
- Vladimir Ilyashenko (2:5080/1003)
- To
- All
- Date
- 2006-02-23T19:55:42Z
- Area
- SU.DBMS.SQL
From: "Vladimir Ilyashenko" <fido7@front.ru>
Reply-To: "Vladimir Ilyashenko" <fido7@front.ru>
Здравствуй, All !
Прежде всего, спасибо за помощь в решении предыдущего вопроса, но как
говорят, нахальство... :)
Есть еще вопрос следующего характера:
Все тот-же Microsoft Data Access Objects, v.3.6, все тот-же неопытный в SQL
программист :)
Имеется две таблицы:
TAB1
a (ключ) b ...
102 +
233 +
345 -
411 +
... ...
TAB2
x(ключ) y (некоторые значения из TAB1.а без совпадений)....
... 233
345
102
...
Надо выбрать ИЗ "TAB1.а" только те значения, которых нет В "TAB2.y" (AND
TAB1.b='+')
Пишу запросы, как рекомендуют в учебниках:
SELECT TAB1.а
FROM TAB1
WHERE TAB1.b = '+' AND TAB1.а <> ALL
(SELECT TAB2.y
FROM TAB2)
- имею нормальный результат, но успеваю выкурить пяток сигарет и выпить пару
чашечек кофе:(
SELECT TAB1.а
FROM TAB1
WHERE TAB1.b = '+' AND NOT EXISTS
(SELECT TAB2.y
FROM TAB2
WHERE TAB2.y = TAB1.a)
- те же ..., вид с боку.
Пробовал еще несколько подобных вариантов - тормоза.
Имеется ли в арсенале уважаемого All какой-нибудь прием, позволяющий
ускорить эту операцию?
А скорость нужна хорошая - запрос повторяется многократно за день. И
поэтому, пока, "езжу в Москву через Владивосток" - добавил TAB3 с колонками
TAB1.a и dbBoolean, и сначала отмечаю совпадения, а уж потом выбираю
дифференциацию. И хотя получается значительно быстрее, чем в приведенных
выше запросах, но, кажется мне, - я не прав :(
ЗЫ Я в эхе только-только, и пока ФАКа не видел. Может кто подскажет
серьезный учебник из которого можно почерпнуть реальные практические приемы
составления SQL- запросов и пр. функций работы с базами. А то у меня все
больше для начинающих.
Всего тебе наилучшего, All !
_ Владимир. _
/VERBA VOLANT, SCRIPTA MANENT/ <слова улетают, написанное остается>
--- ifmail v.2.15dev5
* Origin: Private (2:5080/1003@fidonet)
SEEN-BY: 46/50 50/12 278/169 450/1024 452/25 154 2432/260 4615/21 5000/5000
SEEN-BY: 5001/100 5010/2 53 5011/13 5012/30 46 5015/28 5019/31 5020/545 715
SEEN-BY: 5020/760 1641 2238 4441 5021/29 5025/3 5026/10 5027/12 5028/61
SEEN-BY: 5029/45 60 5030/115 5035/38 5041/4 5042/21 5045/7 5049/19 164 5053/16
SEEN-BY: 5054/1 8 9 28 35 37 45 50 63 67 5058/999 5059/9 5070/156 5071/22
SEEN-BY: 5077/70 5078/20 5080/68 147 239 1003 5085/13 87 5093/4 5095/20
SEEN-BY: 5097/31 64 6000/1 12 6028/1 6055/2 6083/12
PATH: 5080/1003 5020/545 5054/1 37