Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Delete / 6 сообщений из 6, страница 1 из 1
14.06.2004, 18:49
    #32560640
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete
Почему долго происходит удаление по индексным полям:
kod1 - Character(14)
kod2 - Integer

DELETE SEEK(kod1,'tab1','kod1') FOR AND !SEEK(kod2,'tab2','kod2') IN kod3
...
Рейтинг: 0 / 0
14.06.2004, 18:51
    #32560644
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete
Обшибся...
DELETE FOR SEEK(kod1,'tab1','kod1') AND !SEEK(kod2,'tab2','kod2') IN tab3
...
Рейтинг: 0 / 0
14.06.2004, 23:52
    #32560855
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete
Никогда так не писал...

А не пробовали использовать DELETE SQL ?
...
Рейтинг: 0 / 0
15.06.2004, 12:06
    #32561299
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete
Будет че-то типа такого:

DELETE FROM tab1 WHERE exists(sele tab1.* from tab1, tab2 WHERE tab1.kod1 = tab2.kod1 AND !EXISTS(sele tab3.* from tab3 WHERE tab3.kod2 = tab1.kod2)

удаление происходит медленно около 4-6 сек.
сам селект выполняется меньше 1 сек.
tab1 - 140 000 записей
tab2 - 1 запись
tab3 - 1 запись

если разбить на селект и скан фор сеек, то удалить - отрабатывает меньше секунды...

Хотелось бы одной командой...
...
Рейтинг: 0 / 0
15.06.2004, 12:16
    #32561326
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete
Да, я использовал всегда последний вариант - находил необходимые записи и потом их удалял.

На мой взгляд - проблема лежит в плоскости оптимизации.

Кстати, не всегда одна команда в VFP работает быстрее, чем несколько, написанных в старой манере Но это тема уже другого топика...

Good luck!
...
Рейтинг: 0 / 0
15.06.2004, 12:35
    #32561372
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delete
А почему он должен выпоняться быстро? У тебя же голое сканирование исходной таблицы. Ускорение сделано только в поиске значенией в связанных таблицах.

Если бы ты использовал индекс по главной таблице, тогда было бы и ускорение.

Если подчиненные таблицы имеют по одной записи, то твое условие удаления должно выглядеть примерно так:

Код: plaintext
1.
2.
3.
SELECT tab3
SET ORDER TO  0 
SET DELETED OFF
DELETE FOR kod1=tab1.kod1 AND kod2<>tab2.kod2

Вот если в таблице tab3 будут 2 индекса: по полю kod1 и по полю kod2. Тогда в таком синтаксисе ты и получишь ускорение.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Delete / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]