#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть таблица «заказы» с идентификатором в качестве внешнего ключа в таблицах ниже dispatch_details
order_histories
sales_return_details
promotion_orders
При создании таблицы мы не добавили КАСКАД УДАЛЕНИЯ. итак, я удалил все необходимые записи из таблиц, на которые ссылаются, т.е. dispatch_details, order_histories, sales_return_details и promotion_orders.
Требуется слишком много времени, но по-прежнему невозможно удалить записи из заказов, хотя я не получаю никаких ошибок. Это только обработка, но не завершается.
Я дополнительно добавил индекс для всей таблицы, на которую ссылается.
create index idx_dispatch_details_order_id on dispatch_details(order_id);
create index idx_order_histories_order_id on order_histories(order_id);
create index idx_sales_return_details_order_id on sales_return_details(order_id);
create index idx_promotion_orders_order_id on promotion_orders(order_id);
Тем не менее, я не могу удалить записи.
Есть ли какой-либо способ эффективно удалить таблицу записей из заказов? В настоящее время я не могу удалить даже отдельные записи из заказов.
Комментарии:
1. что такое запрос на удаление, который занимает много времени? Кроме того, он будет отражать строки, удаленные после удаления всех строк.
2. Вы пытаетесь удалить их все или только некоторые конкретные заказы? Используйте truncate, если вы хотите удалить все. О том, что занимает много времени, удаление обычно выполняет запись внутри файла журнала, если файл журнала слишком велик, это займет много времени. Вы можете сделать резервную копию журнала базы данных перед выполнением удаления.
3. Я подозреваю, что у вас какой-то сложный триггер.
4. Я использовал следующий запрос: удалить из заказов, где call_id в (выберите идентификатор из вызовов, где daily_orders_info_id в (выберите идентификатор из daily_orders_info, где дата <‘2020-07-18’)); И добавлен индекс как для идентификатора вызовов, так и для идентификатора daily_orders_info. Нет никакого триггера, связанного с какими-либо таблицами. Невозможно использовать усеченные таблицы. Необходимо удалить записи только для определенных данных финансового года
Ответ №1:
Я дополнительно добавил индекс ко всем вызовам таблиц и таблице daily_order_info. Кроме того, таблица orders имеет ссылку parent_order_id FK на себя. Добавлен индекс и для этого столбца. В принципе, для всех таблиц, на которые ссылаются: создал индекс, и это решило мою проблему.