Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Доброе время суток Борюсь с одним запросом, в данный момент выполняется 10 сек, мне нужно добиться высокой производительности. Есть три компании(А,Б,В) и у каждого свое наличие на складах (Details). У каждого свои разные наценки(Disconts), в том числе наценка на стоимость (SurchargeCost). Компания В хочет видеть свое наличие и наличие у своих партнеров А и В. Соответственно нужно подготовить продажную цену каждой позиции для компании В, и плюс добавить свои наценки. Собственно пришлось применить табличные функции и union Вот примерно сам запрос Код: 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. и применение Код: 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. Стоимость объединения discinct sort очень дорогая, ребята сможете подсказать другие варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2018, 18:32 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur, discinct sort вызывает union, уверены, что нельзя использовать union all? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2018, 18:36 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur, Очень большие таблицы? Может быть вьюшку сделать по всем компаниям с уже посчитанными ценами (SCHEMABINDING?) и из неё выбирать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2018, 19:16 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, пробовал, да и по идею union all должен шустрее работать, но работает больше 5 мин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2018, 23:31 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
PizzaPizza, Не знаю как это поможет, мне нужно получить готовую цену от компании А и Б со своими наценками, а потом от этой цены прибавить наценки В. Грубо говоря А и Б являются поставщиками В ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2018, 23:52 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur, судя по Makvetsyan Arturв данный момент выполняется 10 сек, мне нужно добиться высокой производительности. запрос выполняется часто Вы джойните таблицу Supplier в функции, которая выполняется два раза, и потом еще раз джойните в основном запросе. Я бы сравнил планы выполнения ваших запросов, т.к. возможно, что, если не использовать функции, оптимизатор сможет уменьшить количество проходов по таблицам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 00:31 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
PizzaPizza, я вас понял кажется, попробую наверное лучше покажу пример что мне нужно у компании А в таблице Details: Артикул|Кол-во|цена 333305 | 4 | 400 333304 | 5 | 500 Б : 333306 | 4 | 700 333307 | 5 | 1500 В: sp1047 | 4 | 1400 oc90 | 5 | 300 (Наценка на стоимость учитывается после общей наценки) Общая наценки | наценка на стоимость А - 10% | от 500 - 1000 руб - 5 % Б - 20% | от 1000 - 1500 руб - 5 % В - 30% | от 1500 - 2000 руб - 5 % Результатом должен служить предложения от компании В, у которого есть наличие своего магазина и наличие его поставщиков А и В: цена закупки от А для В 333305 | 4 | 400 * 10% = 440 333304 | 5 | 500 * 10% * 5% = 577.5 цена закупки от Б для В: 333306 | 4 | 700 * 20% = 840 333307 | 5 | 1500 * 20% * 5% = 1890 Итого должно быть на выходе В: 333305 | 4 | 440 * 30% = 572 333304 | 5 | 577.5 * 30% = 750.75 333306 | 4 | 840 * 30% = 1092 333307 | 5 | 1890 * 30% * 5% = 2579.85 sp1047 | 4 | 1400 * 30% * 5%= 1911 oc90 | 5 | 300 * 30% = 390 Вот собственно чего я хотел добиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 01:39 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur, я бы посмотрел сюда внимательно, тк не очень понимаю что тут имелось ввиду: Код: plaintext 1. 2. 3. 4. у вас функции делают выборки из таблицы Detail с фильтром по supplierId, и потом еще раз вся таблица Detail присоединяется к этим выборкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 03:05 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaMakvetsyan Artur, я бы посмотрел сюда внимательно, тк не очень понимаю что тут имелось ввиду: Код: plaintext 1. 2. 3. 4. у вас функции делают выборки из таблицы Detail с фильтром по supplierId, и потом еще раз вся таблица Detail присоединяется к этим выборкам. Это шоб быстрее работало. Очевидно ж. ЗЫ. Тредстартер чудак на известную букву. 5 (пять) раз выполняет одно и то же соединение и еще жалуется. 1. Выкинуть функцию. 2. Написать ОДИН раз соединение. 3. Раз в пять должно быть быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 06:08 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 07:49 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
aleks222, Да извините, это я как бы примерный запрос написал, чтоб понять суть. Прошу это не обращать внимания на кол-во параметров в функции. Насчет представления как раз попробую, а потом объединить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 08:21 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
aleks222ЗЫ. Тредстартер чудак на известную букву. 5 (пять) раз выполняет одно и то же соединение и еще жалуется. 1. Выкинуть функцию. 2. Написать ОДИН раз соединение. 3. Раз в пять должно быть быстрее. Это конечно хорошо один раз соединение. Не знаю может я туплю или вы таки не поняли суть задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 08:24 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
мдя.. ТС..ето шутка юмора ? Какая оптимизация если пример отродясь не рабочий Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 10:28 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Maxx, Ребята я извиняюсь что с ошибкой опубликовал код, но суть не в этом. Мне просто нужна подсказка, варианты объединения или каких-то хитростей. Я же писал код выполняется 10 сек, и код рабочий, а тут немного скорректировал, показать только саму структуру запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 10:57 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan ArturMaxx, Ребята я извиняюсь что с ошибкой опубликовал код, но суть не в этом. Мне просто нужна подсказка, варианты объединения или каких-то хитростей. Я же писал код выполняется 10 сек, и код рабочий, а тут немного скорректировал, показать только саму структуру запроса Да Вам же уже ответили Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. [/SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 11:04 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Maxx, Кажется я непонятно изложил вопрос. Вы так и не поняли суть задачи. Ответ простой для простой задачи. Все равно все спасибо за помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 11:15 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur, ну сорри учитесь задавать вопросы.... вам сказали что у вас 3 раза делаеться один и ото же селект ... какой ответ вы хотите ? Иили избавить от ф-ции религия не возволяет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 11:18 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Maxx, авторну сорри учитесь задавать вопросы.... Жаль что нельзя редактировать тему. Но я указал пример исходных данных, и что должно быть на выходе, чтобы поняли какие зависимости У меня самого нет желания делать лишних селектов и лишних обращений к таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 11:36 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur, Запрос нужно переписать без функций и примерно в таком ключе: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 11:56 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
invm, Вашу задумку понял, собираете отдельно коэффициенты наценок а потом применить в результирующий запрос. Что то в этом ключе попробую. Почему я так не делал отдельно, потому что мне нужно знать цены, по которой компания В может купить у поставщиков, а потом применить коэффициенты В. Пример: Цена товара поставщика А известна его закупочная 500 руб. Этот же товар А предлагает В по цене 700 руб (наценки А для В). А затем чтобы компания В могла продавать своим клиентам, нужно применить наценку 30%, плюс 5 % если (товар * 30%) находится в диапазоне от 1500 до 2000 руб. Ладно ребята, спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 13:07 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Arturinvm, Вашу задумку понял, собираете отдельно коэффициенты наценок а потом применить в результирующий запрос. Что то в этом ключе попробую. Почему я так не делал отдельно, потому что мне нужно знать цены, по которой компания В может купить у поставщиков, а потом применить коэффициенты В. Пример: Цена товара поставщика А известна его закупочная 500 руб. Этот же товар А предлагает В по цене 700 руб (наценки А для В). А затем чтобы компания В могла продавать своим клиентам, нужно применить наценку 30%, плюс 5 % если (товар * 30%) находится в диапазоне от 1500 до 2000 руб. Ладно ребята, спасибо за помощь. Пойми, страдалец, всем лень вникать в тонкости твоих расчетов. НО! Большинство понимает, что считать для А и В цены "особым образом" можно в ОДНОМ селекте. Как только ты это осознаешь - тебе дивно полегчает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 14:47 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
aleks222, Ребята, не пинайте меня одной подсказской. Это я понял. Я это экспериментировал и с одним union, результата нет. Да знаю что тут я напихал много текста. Я не страдалец, вы какие-то грубые. Я пришел за подсказской, а вы все одно и тоже. Но invm отдельно спасибо, как-то старались помочь а не пинать как вы меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 15:36 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan Artur, Здесь надо ориентироваться на то, что сервер пытается сделать все сразу и при этом почти вслепую. Все равно как из мешка среди кучи грецких орехов пытаться вытащить горсть фундука одной рукой не заглядывая в мешок по описанию ощущений другим человеком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 19:03 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Makvetsyan ArturЯ пришел за подсказской, а вы все одно и тоже. Вам подсказка не нужна. Вам стоит начать разбивать запрос на шаги начиная с самого глубокого подзапроса и задавать себе вопросы "почему" и "зачем". Например: зачем вы делаете выборку из таблицы с помощью функции и потом присоединяете всю эту же таблицу к результатам выборки? Возможно у вас там более сложный алгоритм и структура таблиц, так как очевидно, что приведенный вами код сильно модифицирован, и не видя это все возможно только гадать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 22:09 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39729119&tid=1688817]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 426ms |

| 0 / 0 |
