Могут быть построены довольно простые примеры , которые напрямую связаны с деструкторами, а не с самоанализом статуса noexcept
:
void a(int);
void b() noexcept;
void c(int i) {
struct A {
int i;
~A() {a(i);}
} a={i};
b();
a.i=1;
}
Здесь noexcept
позволяет инициализировать a
в вызывающего абонента следует игнорировать, поскольку деструктор не может его наблюдать.
struct B {~B();};
void f();
void g() noexcept {
B b1;
f();
B b2;
}
Здесь noexcept
позволяет пропускать информацию кадра, необходимую в случае, если вызываемый абонент выбрасывает. Это зависит от (очень распространенного) решения не раскручивать стек при вызове std::terminate
.
Самый быстрый способ - использовать DROP TABLE, чтобы полностью удалить таблицу и воссоздать ее, используя то же определение. Если у вас нет ограничений внешнего ключа для таблицы, вы должны это сделать.
Если вы используете версию MySQL выше 5.0.3, это произойдет автоматически с TRUNCATE. Вы также можете получить некоторую полезную информацию из руководства, оно описывает, как TRUNCATE работает с ограничениями FK. http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html
РЕДАКТИРОВАТЬ: TRUNCATE - это не то же самое, что отбрасывание или УДАЛЕНИЕ ИЗ. Для тех, кто не понимает различий, пожалуйста, проверьте ссылку руководства выше. TRUNCATE будет действовать так же, как отбрасывание, если может (если нет FK), в противном случае он будет действовать как DELETE FROM без предложения where.
Не могли бы вы взять схему, отбросить таблицу и воссоздать ее?
drop table
должен быть самым быстрым способом избавиться от него.
Если вы просто хотите полностью избавиться от таблицы, почему бы просто не удалить ее?
Вы пробовали использовать "drop"? Я использовал его для таблиц размером более 20 ГБ, и он всегда завершается за секунды.
Лучший способ, который я нашел для этого с MySQL, - это:
DELETE from table_name LIMIT 1000;
Или 10 000 (в зависимости от того, насколько быстро это происходит).
Поместите это в цикл, пока не будут удалены все строки .
Пожалуйста, попробуйте это, так как это действительно сработает. Это займет некоторое время, но это сработает.
Усечение выполняется быстро, обычно порядка секунд или меньше. Если это заняло 30 минут, у вас, вероятно, был случай, когда некоторые внешние ключи ссылались на таблицу, которую вы усекали. Также могут возникнуть проблемы с блокировкой.
Усечение так же эффективно, как и очистка таблицы,
У нас было эти вопросы. Мы больше не используем базу данных в качестве хранилища сеансов с Rails 2.x и хранилищем файлов cookie. Однако сбросить стол - достойное решение. Вы можете подумать об остановке службы mysql, временно отключить ведение журнала, запустить что-то в безопасном режиме, а затем выполнить drop / create. Когда закончите, снова включите ведение журнала.
Не понимаю, почему это занимает так много времени. Но, возможно, попробуйте переименовать и воссоздать пустую таблицу. Тогда вы можете отказаться от «лишней» таблицы, не беспокоясь о том, сколько времени это займет.