![]() |
|
Модераторы: Akella |
![]()
|
|
| mixb |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 13.4.2006 Репутация: нет Всего: нет |
Возникла проблема в Paradox (работаю через BDE в TRxQuery Delphi5) :
- конструкция
очень долго (несколько минут) выполняется, причем вот такая конструкция:
работает очень быстро В table1 - 3000 записей в table2 - 5000 записей Подозреваю что BDE каждый раз перевыполняет
Если вместо IN поставить "=" выполняется очень быстро Может запрос (select id from table2 where x = 1) возвращаеть 0 записей но работает вся конструкция очень долго. Использовать такой код:
на самом деле мне надо
Остается вариант выборки id из table2 ручками а затем подстановка в IN (id1,id2,...idn) Что тут делать? |
||||||||||
|
|||||||||||
| ТоляМБА |
|
||||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: нет Всего: 252 |
Оговорки: У меня нет Paradox, поэтому не знаю, катят ли там JOIN’ы – если не катят – дальше можешь не читать.
Если катят – переделай синтаксис, если надо – я передал просто суть. Делал на MS SQL Server 2000. Почему попробовал с джоинами - потому что на курсах говорили что джоины работают БЫСТРЕЕ (что тебе собственно и надо), чем подзапросы. И ещё – я проверял на маленькой тестовой таблице, какая будет скорость на большой – не знаю, но попробуй, напиши результат. Ворки: Table10 – Field1 (разные буквы), idn(цифры от 1 до 10) Table11 – Field2 (разные буквы, но в некоторых позициях писал ‘ff’), idn(цифры от 1 до 10) Запрос на выборку:
Запрос на удаление:
После запроса на удаление в Table10 остались только записи с идешниками совпадающими с идешниками Table11, в которых значения Field2<>’ff’. |
||||
|
|||||
| bas |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: нет Всего: 2 |
В первом случае идет работа со списком который формируеться динамически (если есть индекс то он будет быстрее формироваться).
Во втором случае список сформирован. |
|||
|
||||
| Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: нет Всего: 13 |
Убедись в том, что есть индекс для table2 по ID.
-------------------- It's better to burn out than to fade away. |
|||
|
||||
| mixb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 13.4.2006 Репутация: нет Всего: нет |
Проблему решил через использование вспомогательной таблицы для подзапросов - в цикле while not query.EOF в строку записываю IDшники через запятую и потом в квадратные скобки и в SQL.
2Sqlninja, - индексы первым делом проверил - все которые используются - в наличии. Может дело в каких то настройках BDE? 2ТоляМБА, на SQL Server'e проблем с вложенными подзапросами мною не наблюдалось - и описываемая мной конструкция работала б. Кстати при JOIN - случайно не удалятся записи из Table11? 2bas - список формируется динамически но есть подозрения что подзапрос выполняется не один раз а при проверке каждой записи. Такое может быть? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Другие СУБД | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |