Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Создаю таблицу из 1 млн целых чисел, представляющих собой 10 отдельных интервалов. Хочу написать SELECT, который вернёт эти 10 интервалов в виде 10 строк. Казалось бы, первый вариант должен выполняться молниеносно, пробежав по таблице единственный раз. Но второй в несколько раз быстрее. Как бы ускорить первый? Код: sql 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 16:05 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
может вам подойдет вот этот вариант Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 16:37 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 16:38 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Андрей Усачёв, с чего бы молниеносно, если у Вас вложены lead() да еще и внутри case. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:18 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Fochaможет вам подойдет вот этот вариант Код: sql 1. 2. 3. Ну здрасьте :) Данные в таблице могут быть произвольные, задача выявить последовательные интервалы. Это только для примера интервалы одинаковые и такие простые :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:29 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Андрей Усачёв Ну здрасьте :) Данные в таблице могут быть произвольные, задача выявить последовательные интервалы. Это только для примера интервалы одинаковые и такие простые :) тогда более реальный пример и вообще где такое вы используете? мне вот интересно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:32 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовАндрей Усачёв, с чего бы молниеносно, если у Вас вложены lead() да еще и внутри case. Совершенно же очевидно, что задачу можно выполнить конвейерно: 1) Самый внутренний подзапрос идёт вдоль первичного ключа и добавляет в прочитанные строки 2 поля. Lead() и Lag() на быстродействие не должны влиять, просто при чтении очередной строки у нас готова не она сама, а предыдущая. 2) Результат при этом можно не сохранять на диск, а сразу передавать во 2-й подзапрос. Он всего лишь добавляет несколько полей. 3) Их тоже надо не сохранять на диск, а передавать в 3-й подзапрос. Его задача просто проигнорировать некоторые записи. 4) 4-й подзапрос, как и 1-й, выдаёт строку дальше с задержкой на 1 строку. Сортировка для Lead() во всех подзапросах не меняется. 5) 5-й подзапрос просто игнорирует некоторые строки предыдущего запроса. То есть первый вариант запроса можно заменить простой функцией на C++ или VB, которая последовательно читает таблицу #T и последовательно обрабатывает её 1-м, 2-м и т. д. 5-м подзапросом. Причём на 3-м и на 5-м обработка может остановиться. Если строка обработалась 5-м подзапросом, её можно выплёвывать пользователю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:45 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Андрей Усачёв, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:48 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
а пардон, не то :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:49 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 17:55 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
FochaАндрей УсачёвНу здрасьте :) Данные в таблице могут быть произвольные, задача выявить последовательные интервалы. Это только для примера интервалы одинаковые и такие простые :) тогда более реальный пример и вообще где такое вы используете? мне вот интересно Я работаю в компании, которая обклеивает алкоголь акцизными марками. Клиенты присылают нам марки и электронные накладные с интервалами марок, которые мы импортируем в БД. Из каждого интервала создаётся множество марок этого интервала. Параллельно этому специальные аппараты считывают с марок штрихкоды DataMatrix и PDF417 (только у марок старого образца) и сохраняют их в БД. Параллельно этому клиенты присылают нам палеты с неоклеенным алкоголем и указания, какие интервалы ранее полученных марок туда клеить. Этим занимаются другие аппараты. При этом некоторые марки могут быть отбракованы, и вместо них нужно взять марки из резерва. В каждый момент времени у марки обязательно есть номер и может быть (а может и не быть) штриход и статус (свободна, использована, отбракована) т. д. Одна из задач: в виде интервалов (а не огромного списка номеров) показать, какие марки ещё не использованы. Или каким уже присвоены штриходы. Или какие были отбракованы и списаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 18:16 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
TaPaK Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вот это похоже на правду. Спасибо, завтра попробую применить к своей задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 18:21 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Андрей Усачёв, если прям сильно хочется на LEAD/LAG решение построить, то поищите по форуму start_of_group, чтобы правильно его "приготовить"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 18:33 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Щукина АннаАндрей Усачёв, если прям сильно хочется на LEAD/LAG решение построить, то поищите по форуму start_of_group, чтобы правильно его "приготовить"... Пример реализации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 19:02 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Андрей УсачёвFochaпропущено... тогда более реальный пример и вообще где такое вы используете? мне вот интересно Я работаю в компании, которая обклеивает алкоголь акцизными марками. Клиенты присылают нам марки и электронные накладные с интервалами марок, которые мы импортируем в БД. Из каждого интервала создаётся множество марок этого интервала. Параллельно этому специальные аппараты считывают с марок штрихкоды DataMatrix и PDF417 (только у марок старого образца) и сохраняют их в БД. Параллельно этому клиенты присылают нам палеты с неоклеенным алкоголем и указания, какие интервалы ранее полученных марок туда клеить. Этим занимаются другие аппараты. При этом некоторые марки могут быть отбракованы, и вместо них нужно взять марки из резерва. В каждый момент времени у марки обязательно есть номер и может быть (а может и не быть) штриход и статус (свободна, использована, отбракована) т. д. Одна из задач: в виде интервалов (а не огромного списка номеров) показать, какие марки ещё не использованы. Или каким уже присвоены штриходы. Или какие были отбракованы и списаны. То есть вы хотите соединить интервал с номером который входит в интервал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 08:34 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
FochaТо есть вы хотите соединить интервал с номером который входит в интервал? В накладных данные приходят так: ААБТ128001 ААБТ129000 (Украина) 07349750001 07349765000 (Россия) Ձ0014870001 Ձ0014880285 (Армения) А для учёта по маркам я записываю в таблицы так: ААБТ128001 ААБТ128002 ААБТ128003 ... 07349750001 07349750002 07349750003 ... Ձ0014870001 Ձ0014870002 Ձ0014870003 ... Со ссылкой на исходный интервал, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 11:30 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Щукина АннаЩукина АннаАндрей Усачёв, если прям сильно хочется на LEAD/LAG решение построить, то поищите по форуму start_of_group, чтобы правильно его "приготовить"... Пример реализации Спасибо большое, но на 1 млн. записей мои изначальные запросы выполнялись 10 и 2 секунд. Запрос TaPaK 1 секунду. Ваш 74 секунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 11:38 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Андрей УсачёвFochaТо есть вы хотите соединить интервал с номером который входит в интервал? В накладных данные приходят так: ААБТ128001 ААБТ129000 (Украина) 07349750001 07349765000 (Россия) Ձ0014870001 Ձ0014880285 (Армения) А для учёта по маркам я записываю в таблицы так: ААБТ128001 ААБТ128002 ААБТ128003 ... 07349750001 07349750002 07349750003 ... Ձ0014870001 Ձ0014870002 Ձ0014870003 ... Со ссылкой на исходный интервал, конечно. я почему вы не можете использовать between? Код: sql 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. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 12:16 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Focha, Потому что на выходе нужно получить совершенно не те интервалы, из которых сгенерированы марки. Например на склад приняли интервал ААБТ128001...ААБТ129000 (одна запись в вашей таблице #d). Использовали в работе (и пометили в таблице) интервалы ААБТ128101...ААБТ129200 ААБТ128301...ААБТ129400 Я хочу по таблице марок (1000 записей в вашей таблице #l) максимально быстро получить список свободных марок в виде 3 строчек: ААБТ128001...ААБТ128100 ААБТ129201...ААБТ128300 ААБТ129401...ААБТ129000 Но мне давно уже ответили, проблема решена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 17:59 |
|
||
|
Почему так медленно работаетконвейер из Lag() и Lead() с одинаковыми условиями (по ключу!)
|
|||
|---|---|---|---|
|
#18+
Андрей УсачёвFocha, Потому что на выходе нужно получить совершенно не те интервалы, из которых сгенерированы марки. Например на склад приняли интервал ААБТ128001...ААБТ129000 (одна запись в вашей таблице #d). Использовали в работе (и пометили в таблице) интервалы ААБТ128101...ААБТ129200 ААБТ128301...ААБТ129400 Я хочу по таблице марок (1000 записей в вашей таблице #l) максимально быстро получить список свободных марок в виде 3 строчек: ААБТ128001...ААБТ128100 ААБТ129201...ААБТ128300 ААБТ129401...ААБТ129000 Но мне давно уже ответили, проблема решена. хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2019, 08:44 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39852937&tid=1687362]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
168ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 551ms |

| 0 / 0 |
