|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Добрый день, друзья! Имею задачу, когда значения параметров хранятся в реляционной БД SQL Oracle. Вот фрагмент, который иллюстрирует эту примитивную структуру хранения данных и тот совершенно типовой запрос, которым мы достаем из этой БД нужные нам данные. А нужно нам всегда одно и то же - последнее значение (val) по дате (dt) для каждого тега (id). Прошу обратить внимание, что по некоторым тегам (id) последние значения зарыты глубоко в истории (см. 444). Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Естественно, тегов много, значений тоже. Такой простой запрос дает очень плохие результаты по производительности (запрос длится до 10 минут). Прошу вас посоветовать, как можно оптимизировать подход к запросу данных в такой ситуации? Какие приемы можно тут применить? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 17:21 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
1. Оконные функции. 2. Хранимые агрегаты. 3. Они же в виде материализованного представления. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 17:28 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо за оперативный ответ! Можно Вас попросить сказать еще пару фраз на счет оконных функций? Верно ли я понимаю, что целесообразно проделать тот же "поиск максимальной даты" и "запрос по максимальной дате" В ОКНЕ ПО ТЕГУ (ID)? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 17:32 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Нет, это "последнее/первое значение" в порядке даты. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 17:34 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Вы примерно это имели в виду? Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 17:53 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Begimot441Вы примерно это имели в виду? Нет, подзапрос тут совсем не нужен. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 18:04 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Вас понял! Поискал и составил такой запрос. Так верно или какую то я ерунду составил? Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 18:39 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
точнее, так: Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 18:57 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Begimot441, Можно без аналитики - Group By + keep dense_rank ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 19:05 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
PuM256 Begimot441, Можно без аналитики - Group By + keep dense_rank Нельзя, посколько строк с dt = max(dt) для id может быть > 1. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 19:23 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
SY, А у меня получилось. По-моему, все прекрасно! Код: plsql 1. 2.
Я не написал, а это, видимо, важно: ID + DT уникальны. Завтра проверю, как будет работать на реальной БД ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 19:43 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Begimot441, row_number() не проще? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 22:15 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Stax, Вы имеете в виду так? Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2020, 04:32 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Коллеги, помогайте! Не тянет последный запрос. Время выполнения около 3 минут. Что в таких случаях еще делают? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2020, 11:27 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Друзья, на практике получаются противоречивые результаты. Вот старый запрос. Он работает секунду Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
А вот новый запрос, что я составил исходя из полученной информации текущего топика. Он работает 20 секунд Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
(SELECT DISTINCT ppdId FROM kTab) - дополнительный подзапрос, который сужает количество объектов для анализа (well_id) measure_type_id=7086 - дополнительное условие Поясните мне, пож-та, как такое может быть? Ведь второй запрос должен работать намного быстрее первого? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2020, 12:17 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
второй запрос должен работать намного быстрее первого? Это умозрительные соображения. Чтобы дать конкретные рекомендации, нужен план запроса. Приведите планы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2020, 12:41 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
dmdmdm, Вот этого я и боялся. Дело в том, что я работаю на производственной машине (т.е., не своей личной). Там стоит sqlDbx, на нем я составляю запросы. Пытаюсь активировать "Query Plan", появляется ошибка ORA-01031: привилегий недостаточно А это, насколько я понял из инета, отдельная тема... Попробую аккуратно поправить, если получится... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2020, 13:01 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Begimot441 Stax, Вы имеете в виду так? Код: plsql 1. 2. 3. 4. 5.
да зы почему нет measure_type_id=7086? pss max(val) keep неудобен если надо много полей ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 09:25 |
|
Получение последних значений по тегам из БД SQL. Посоветуйте подход
|
|||
---|---|---|---|
#18+
Begimot441, Если всегда нужны последние данные, и запрашиваются они очень часто, не хотите завести отдельную таблицу, в которую будете складывать последние по времени значения? Т.е. есть основная историческая таблица и есть таблица - срез последних значений, хранящая только последнее по времени значение тэга. При добавлении в основную таблицу нового значения тега, в таблице срезе его обновлять (точнее обновлять если есть такой тэг или добавлять если его нет). Эта таблица-срез будет небольшая, и скорей всего всегда будет находиться в оперативной памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2020, 13:10 |
|
|
start [/forum/topic.php?fid=52&fpage=43&tid=1881147]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 309ms |
total: | 443ms |
0 / 0 |