|
почему так долго работает???
|
|||
---|---|---|---|
#18+
При помощи АДО делают запрос к аксесовской базе, точнее двум, но работает жуть как медленно. Есть две одинаковые базы, но содержимое таблиц немного различается, хочу получить эту самую разницу между двумя таблицами по ключу. Ключ - код продукта, остальные поля - прочая инфа про продукт. Вот хочу узнать, сколько кодов отличается при помощи вот какого запроса: Код: plaintext 1.
а, в общем, работает такой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
в таблицах примерно по 8000 записей, запрос выполняется целых 5 минут, может всё дело в запросе или так и должно всё тормозить??? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2002, 13:46 |
|
почему так долго работает???
|
|||
---|---|---|---|
#18+
Дело в запросе. Проще эту операцию разбить на 2 этапа 1 этап - подсчитать коды, которые присутствуют в обеих таблицах 2 этап - вычесть из общего числа продуктов кол-во совпадающих,подсчитанное на этапе 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2002, 12:12 |
|
почему так долго работает???
|
|||
---|---|---|---|
#18+
Я не думаю, что так проще. Точнее уверен. Лучше запрос написать так: select count(a.cod) from Table1 a where not exists (select 'X' from Table2 b where b.cod=a.cod); или так select count(a.cod) from Table1 a where a.cod not in (select b.cod from Table2 b); Не знаю, что будет из них быстрее. Надо посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2002, 13:30 |
|
почему так долго работает???
|
|||
---|---|---|---|
#18+
NOT EXIST будет быстрее... Сталкивался с подобной проблемой. Все дело в запросе - уж больно медленно работает 'someone IN (sometwo)'. В одном месте ушел на "ручное программное решение", в другом написал (хорошо, помогли мне написать) такой запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2002, 20:21 |
|
почему так долго работает???
|
|||
---|---|---|---|
#18+
И все таки, это во многом зависит от используемой БД, количества записей в таблицах, наличия индексов в этих таблицах. Так что результаты могут быть прямо противоположными. Пример. Таблица 2 содержит всего одну запись, и для таблицы 1, содержащей 10000 записей построен индекс. Запрос с IN произведет только три быстрых операции 1. Выборка из Таблица 2 одного значения 2. Выборка из таблицы 1 по индексу. Например, Оракл умеет использовать индекс в запросах с IN. Запрос с Exists же будет просматривать всю таблицу 1. Так что ситуация не всегда однозначная и лучше проверить оба типа запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2002, 09:54 |
|
|
start [/forum/topic.php?fid=57&msg=32059919&tid=2036526]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 172ms |
0 / 0 |