Это немного сложно. Производительность удаления зависит от многих факторов:
- Сколько времени нужно, чтобы найти строки, которые нужно удалить?
- Сколько строк удаляется?
- Какие индексы, построенные на таблице, также необходимо изменить?
- Что еще происходит в системе?
- Какие триггеры удаления определены в таблице?
Это затрудняет ответ на вопрос. Первые два можно адресовать. Для первого помогает индекс:
create index idx_tbl_table_user on tbl_table(user);
Чтобы использовать этот индекс, убедитесь, что у вас есть правильные типы. Числовые идентификаторы обычно хранятся в виде чисел, а не строк - и преобразования типов могут иногда препятствовать использованию индексов. Поэтому, если user
- это число, вы хотите написать:
where use = 123
Вторая проблема удаления «слишком большого количества» строк может быть решена более трудным способом. Вы можете создать временную таблицу с данными, которые вы хотите сохранить, обрезать исходную таблицу и заново вставить значения. Увы, я сомневаюсь, что вы могли бы закончить это за 7 секунд, так что это не вариант.
Что касается остальных трех, вам необходимо провести дополнительное исследование вашей системы и таблиц, если они являются причиной задержки. Конечно, если проблема заключается в загрузке системы, то выполнение запроса в более спокойное время ускорит запрос.