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

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

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

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
Delete
    #32561326
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я использовал всегда последний вариант - находил необходимые записи и потом их удалял.

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

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

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

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

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

Код: 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
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Delete
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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