![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| studentigor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 397 Регистрация: 14.11.2008 Репутация: нет Всего: нет |
Всем привет.
Есть в базе таблица с объявлениями, она уже выросла более чем на 2 миллиона записей, и продолжает расти. Из за такого объема записей поиск по таблице становится все медленее и медленее. Я решил сделать 2 таблици, 1я - "архивная", 2я - таблица с записями за последние 4 месяца. Таблици находятся в одной базе. Теперь нужно сделать скрипт, который бы из 2й таблици переносил записи(именно переносил), даты которых более 4х месяцев, в первую. Хочу поинтересоваться, как лучше сделать. Либо сделать РНР скрипт, подвесить его на крон, который бы делал SELECT FROM t_2 .... INSERT INTO t_1 .... DELETE FROM t_2 Или есть какието решения непосредственно в mysql, или ещё какието? Подскажите пожалуйста как лучше такое организовать? Спасибо Это сообщение отредактировал(а) studentigor - 19.3.2012, 11:07 |
|||
|
||||
| РОМАN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 5.4.2012 Репутация: нет Всего: нет |
При данном раскладе можно объединить первые 2 пункта: INSERT INTO ... SELECT ...
|
|||
|
||||
| ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
создаст таблицу tmp в памяти. Если на 4 месяца набирается не очень много записей, то такое поведение вполне оправдано. Если таблица будет большой - тоже не страшно, просто таблица создастся на диске..
вставить все записи в архивную таблицу
удалит все записи, которые ранее были вставлены в архив. Алгоритм будет стойким к параллельному запуску. То есть, лишних записей не будет удалено даже если одновременно будет запущено пара и больше версий скрипта. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||||
|
|||||||
| РОМАN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 5.4.2012 Репутация: нет Всего: нет |
честно говоря непонятно, зачем так
предложенный автором вариант: SELECT FROM t_2 .... INSERT INTO t_1 .... DELETE FROM t_2 гораздо прозрачнее... Кроме того TEMPORARY таблицы не поддерживают индексы.. "лишних записей не будет удалено даже если одновременно будет запущено пара и больше версий скрипта." лишних записей и так не будет удалено, так как удаление с условием по дате. нельзя два раза удалить данные за вчерашний день |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
РОМАN, В тех запросах, которые используют временную таблицу ее индексы не используются.
в моем случае - нужно просто последовательно исполнить 3 запроса. Это ли не прозрачность? Выборка по диапазону дат делается в единственном запросе. В случае studentigor нужно выбрать в массив результат и в цикле запихать результат на место. Нет? Может и нет, можно составить единый запрос на вставку результатов выборки, но все равно выборка по разнице дат будет делаться 2 раза. Зато можно их 2 раза вставить... потенциально. Впрочем, ладно, тут надо тестировать что будет быстрее -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| РОМАN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 5.4.2012 Репутация: нет Всего: нет |
да не пойму просто в чем косяк Добавлено @ 23:52 можно же вот так (почти как автор) 1. INSERT INTO ... SELECT ... 2. DELETE FROM t_2 зачем временные создавать? "В тех запросах, которые используют временную таблицу ее индексы не используются." а я об этом как раз и говорил ) "Кроме того TEMPORARY таблицы не поддерживают индексы.." Добавлено @ 00:04 "Впрочем, ладно, тут надо тестировать что будет быстрее Это сообщение отредактировал(а) РОМАN - 7.4.2012, 10:29 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |