![]() |
|
Модераторы: LSD |
![]()
|
|
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
Здравстуйте.
Попросили помочь с запрососом на удаление записей.В таблице 17 млн записей.Следующий запрос выполняется очень долго. В голову приходит обьеденить все not in в 1. Может что нибудь ещё сделать для ускорения.
|
|||
|
||||
| Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
Ваш SQL может работать очень по разному в зависимости от среды. Давайте начнем с описаний всех таблиц из запроса (типы, индексы, кол. строк и т.д.).
-------------------- It's better to burn out than to fade away. |
|||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
Доступа к базе нет.известно что надо удалить большинство записей.Наклепал такое
|
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
удалить процентов 70.
>дня.(как мне сказали) |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
а разве вопрос еще актуален?
решение чрез create table as в подобном случае всем лучше. Единственно, тут может окзазаться/*а может и нет*/ выгоднее использовать exists вместо in. Если же оставлять In, то возможноимело бы смысл сделать индекс уникальным. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
не легче будет сохранить 30%, сделать truncate и заново залить в базу? заодно и дефрагментация получиться. уж больно названия колонок и таблиц знакомые, не TeamTrack случайно? |
|||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
||||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Я на днях столкнулся со схожей проблемой. Разница лишь в том, что truncate нельзя сделать, т.к. сервис остановке не подлежит.
В результате я не нашёл ничего умнее чем написать джобу, которая раз в минуту просыпается, лимитированым балком выгребает список на удаление, чистит записи по одной и померает. Операция занимает около 15 секунд. Лимит искал опытным путём, смотря загрузку через EM. Получилось 5000. Таким образом это 5000*60*24=7,200,000 в сутки, что вполне достаточно до следущего вброса аналитики. Метод мне видится довольно удачным.
-------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Zloxa |
|
||||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
а не эквивалент ли это
Только это черевато тем, что всякий раз будут сканироватсья блоки ранее удаленных записей. Лучше открывать курсор один раз а не каждый, фетчить балком, удалять форалом. Правда есть риск свалиться по "снапшот ту олд"
Это сообщение отредактировал(а) Zloxa - 26.3.2010, 20:05 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||||
|
|||||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Фактически да. Я такой вариант изучал. Реально там получалось:
Но мне показалось красивее и логичнее с bulk и forall. А производительность фактически одинакова. Может быть вариант с простым делетом выигрывает немного на самом удалении, но заметить я этого не смог. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
если id индексирован и использовать для сортировки при отборе индекс /*обычно помогает хинт first_rows*/, то проблема сканирования блоков ранее удаленных записей уходит...... хотя.. range scan по разреженному индексу тоже не айс. По сути у тебя ан один феч два делета. Я поддерживаю тебя в том, что булкфеч с форалом эстетичнее -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |