Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
существует таблица (recid, tdate, value) порядка 50.000.000 записей. В ней данные разбиты по дня, в каждом дне порядка 100.000. необходимо выбрать из каждого дня МАКС и МИН, не включая первую и последнюю запись (по recid). (если запросом выбирать первую и последнюю для кадого дня записи то получится очень долго), может есть какой-нить способ или другое решение. Заренне благодарен, Павел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 19:23 |
|
||
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
IMHO объем данных слишком большой для быстрой выборки. Как варианты: 1) Попробовать партиционирование, скажем хотябы по номеру месяца. 2) Сделать cron ночью чтобы он расчитывал эти параметры только за прошлые сутки и записывал их в отдельную таблицу. Ну и соответсвенно готовые данные забирать уже оттуда. 3) Есть ли необходимость хранить данные за 500 дней? Если особой нужды нет - может быть тогда сделать архивную таблицу и иногда туда скидывать ненужные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 05:41 |
|
||
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
тут скорее на запросом а архитектурой попахивает. дай более точную формулировку задачи- т.е. тебе нужно каждый день в начале работы получать обработку ТОЛЬКО ПРЕДЫДУЩЕГО ДНЯ или нужно иметь возможность постоянно выполнять обработки по всем дням сразу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 07:25 |
|
||
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
Необходимы два индекса: dv (tdate, value), di (tdate, recid). 1) Получить список дат, присутствующих в таблице. while ( $DATE = "select tdate from t where tdate>$DATE order by tdate limit 1" ) { -- быстро с использованием индекса dv или di -- тело цикла } 2) В теле цикле для каждой даты выполнить: 2.1) Найти первую и последнюю записи по rec_id: $ID_FIRST = "select recid from t where tdate=$DATE order by recid limit 1" -- быстро с использованием индекса di $ID_LAST = "select recid from t where tdate=$DATE order by recid desc limit 1" 2.2) Выбрать min(value), max(value) кроме $ID_FIRST, $ID_LAST: $VAL_MIN = "select value from t where tdate=$DATE and recid not in ( $ID_FIRST, $ID_LAST ) order by value limit 1" -- быстро с использованием индекса dv $VAL_MAX = "select value from t where tdate=$DATE and recid not in ( $ID_FIRST, $ID_LAST ) order by value desc limit 1" 2.3) Возвратить $DATE, $VAL_MIN, $VAL_MAX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 10:10 |
|
||
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
попробуй что-нить типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 10:50 |
|
||
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
ну и, конечно, индексы создай, если нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 10:51 |
|
||
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
Спасибо за сообщения. Извините, что сразу не описал подробно. Существует две таблицы Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Data, как уже говорил 50.000.000 записей. Необходимо: один раз обработать таблицу, и сформировать таблицу дневных данных. Где будут данные за каждый день по каждому "NAME" и со значениями "LAST" Максимальной, Минимальной, Первой (не включая первую запись), Последней (не включая последнюю запись относительно "TTS", "RECID"), и сумма LAST за весь день. Всё это записать в "data_day". Как я понимаю это надо оформить в виде функции (плохо знаю, синтатксис страдает.). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Что-то типа того? Вот только с синтаксисом надо разобраться.(( И с индексами.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 14:53 |
|
||
|
Помогите с запросом.
|
|||
|---|---|---|---|
|
#18+
puzzleНеобходимо: один раз обработать таблицу, и сформировать таблицу дневных данных. Где будут данные за каждый день по каждому "NAME" и со значениями "LAST" Максимальной, Минимальной, Первой (не включая первую запись), Последней (не включая последнюю запись относительно "TTS", "RECID"), и сумма LAST за весь день. Всё это записать в "data_day"."сумма LAST за весь день" - в этом случае стоит использовать group by, так как придется "прочесывать" всю таблицу. "не включая последнюю запись относительно TTS, RECID" - не понятно при каком упорядочивании, уточните пожалуйста. по времени? в полученной таблице data_day поле tts по сути является датой, а не timestamp? в полученной таблице data_day комбинация полей (name,tts) уникальна? что такое recid в таблице data_day, как его получать/вычислять? за основу наверное надо будет взять такой запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:06 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33957517&tid=2006119]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 359ms |

| 0 / 0 |
