Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
Друзья, здравствуйте. Возможно, я малость перегрелся и задам тупой вопрос. Но... Вот таблица, в которую валится статистика по неким источникам. Есть источник, который раз в N минут отдаёт некий результат. (Столбец src_id - внешний ключ.) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Соответственно, содержимое этой таблицы выглядит примерно так. idsrc_iddateresult............73156712017-07-24 17:04:06073157322017-07-24 17:04:06173156632017-07-24 17:04:06073156842017-07-24 17:04:06073175032017-07-24 17:08:05073175242017-07-24 17:08:05273175112017-07-24 17:08:05073175322017-07-24 17:08:05073193432017-07-24 17:12:05073193542017-07-24 17:12:05073193712017-07-24 17:12:06073193622017-07-24 17:12:06273211812017-07-24 17:16:06073212222017-07-24 17:16:06073211932017-07-24 17:16:06073212742017-07-24 17:16:06073230232017-07-24 17:20:05073230322017-07-24 17:20:05073230512017-07-24 17:20:06173230442017-07-24 17:20:06073248632017-07-24 17:24:05073248742017-07-24 17:24:05073248912017-07-24 17:24:06073249122017-07-24 17:24:061............ А теперь собственно тупой вопрос. Как просто и без проктологии выцепить самые свежие значения result по всем src_id? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2017, 17:33 |
|
||
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
Алекс М.Друзья, здравствуйте. Возможно, я малость перегрелся и задам тупой вопрос. Но... Вот таблица, в которую валится статистика по неким источникам. Есть источник, который раз в N минут отдаёт некий результат. (Столбец src_id - внешний ключ.) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Соответственно, содержимое этой таблицы выглядит примерно так. idsrc_iddateresult............73156712017-07-24 17:04:06073157322017-07-24 17:04:06173156632017-07-24 17:04:06073156842017-07-24 17:04:06073175032017-07-24 17:08:05073175242017-07-24 17:08:05273175112017-07-24 17:08:05073175322017-07-24 17:08:05073193432017-07-24 17:12:05073193542017-07-24 17:12:05073193712017-07-24 17:12:06073193622017-07-24 17:12:06273211812017-07-24 17:16:06073212222017-07-24 17:16:06073211932017-07-24 17:16:06073212742017-07-24 17:16:06073230232017-07-24 17:20:05073230322017-07-24 17:20:05073230512017-07-24 17:20:06173230442017-07-24 17:20:06073248632017-07-24 17:24:05073248742017-07-24 17:24:05073248912017-07-24 17:24:06073249122017-07-24 17:24:061............ А теперь собственно тупой вопрос. Как просто и без проктологии выцепить самые свежие значения result по всем src_id? Код: sql 1. 2. 3. 4. 5. 6. index stat(src_id, id) (...или stat(src_id) достаточно....) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2017, 17:55 |
|
||
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
Сделал указанный индекс. Однако помогло не сильно... В таблице около миллиона записей сейчас. В итоге упомянутый селект отработал за довольно продолжительное время: Код: plaintext На всякий случай: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 12:11 |
|
||
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
Не это ли? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 12:23 |
|
||
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
Нет, получилась хрень... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 12:28 |
|
||
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
Алекс М.Не это ли? Код: sql 1. нет. result будет не от MAX(date). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 12:30 |
|
||
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
В общем, забил я на это дело и пошёл другим путём. Создал специальную табличку для самых свежих значений и перекладываю их туда триггером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 12:45 |
|
||
|
Вытащить самые свежие значения
|
|||
|---|---|---|---|
|
#18+
Алекс М.В общем, забил я на это дело и пошёл другим путём. Создал специальную табличку для самых свежих значений и перекладываю их туда триггером. 1. для скорости чтения отдельная таблица свежих значений -- однозначно лучший вариант. Цена -- создание тригера незначительные задержки на вставке. Если вы сделали так и довольны -- отлично. На будушее -- есть несколько вариантов которые можно попробовать без отдельной таблицы: 2. Создайте индекс на ДВА поля (src_id, id), это может резко ускорить первуй запрос и также полезно для вариантов ниже 3. у вас низкая кардиналити -- мало груп (188) и много значений в группе (по 2500 в каждой групе). В предложеном решении внутри каждой групы делается картезиан. Это решение хорошо для высокой кардиналати но в данном случае получилось медлено. Алтернативное решение для низкой кардиналити: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ..не забудем создать индекс STAT(src_id, id) 4. есть еще одно решение -- на переменных, но оно относительно сложнее и не доказано что быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 16:54 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39496835&tid=1830514]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 363ms |

| 0 / 0 |
