|
Оптимизация
|
|||
---|---|---|---|
#18+
Таблица с древесной структурой - структура большой сборки В одном поле(pth) содержится путь к вершине ну типа 232669-232652-261960-232651-1 есть еще(на всякий случай пишу) поле с уровнем узла в структуре дерева Требуется: максимально быстро подсчитать количество всех деталей для определенной подсборки для подсчета количества одной детали используется пользовательская функция, получающая на вход путь к ней в дереве Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Потом выполняется такой запрос, использующий эту функцию Код: sql 1. 2. 3. 4. 5.
Если его выполнять( для одной некой подсборки - деталей 300 всего) - он выполняется за 2-3 сек. С функцией 30 сек Можно ли что-нибудь изменить, чтобы ускорить процесс? Потому что это на моем компе 30 сек, а там где это будет работать - там уже 2 минуты... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 09:03 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311 Таблица с древесной структурой - структура большой сборки В одном поле(pth) содержится путь к вершине ну типа 232669-232652-261960-232651-1 есть еще(на всякий случай пишу) поле с уровнем узла в структуре дерева Требуется: максимально быстро подсчитать количество всех деталей для определенной подсборки для подсчета количества одной детали используется пользовательская функция, получающая на вход путь к ней в дереве Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Потом выполняется такой запрос, использующий эту функцию Код: sql 1. 2. 3. 4. 5.
Если его выполнять( для одной некой подсборки - деталей 300 всего) без этой функции - он выполняется за 2-3 сек. С функцией 30 сек Можно ли что-нибудь изменить, чтобы ускорить процесс? Потому что это на моем компе 30 сек, а там где это будет работать - там уже 2 минуты... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 09:04 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
От жеж- в место изменить тыкнул в ответить... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 09:05 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311 максимально быстро подсчитать количество всех деталей для определенной подсборки Функция - несерьёзно, накладные расходы велики, плюс куча повторных операций. Собственно, Вы это уже видите. Изменение структуры хранения - рассматривается? Я бы вместо "В одном поле(pth) содержится путь к вершине ну типа 232669-232652-261960-232651-1" держал бы дополнительную таблицу (номер узла - номер узла в пути к корню), от самого узла и до корневого включительно (соответственно для показанного узла номер 232669 в этой таблице будет 5 записей). Или более глубокая оптимизация - с предрасчётом. Ну это если озвученный запрос - и частый, и по времени критичный. Просто при любом изменении пересчитывать нужный показатель для всех зависимых узлов. Ну а в запросе тупо получать заранее рассчитанное значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 09:13 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Akina Я бы вместо "В одном поле(pth) содержится путь к вершине ну типа 232669-232652-261960-232651-1" держал бы дополнительную таблицу (номер узла - номер узла в пути к корню), от самого узла и до корневого включительно (соответственно для показанного узла номер 232669 в этой таблице будет 5 записей). . А вот красного я не понял... У меня сейчас в таблице уже есть code - код узла, и own - код вышестоящего узла... Как использование доп таблицы может мне помочь? Функция, использующая code и own работает в 2 раза медленнее чем с pth Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 09:22 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Akina Или более глубокая оптимизация - с предрасчётом. Ну это если озвученный запрос - и частый, и по времени критичный. Просто при любом изменении пересчитывать нужный показатель для всех зависимых узлов. Ну а в запросе тупо получать заранее рассчитанное значение. Это сделать можно.... но в крайнем случае, пока не хотелось бы ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 09:27 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311 Требуется: максимально быстро подсчитать количество всех деталей для определенной подсборки моя основная задача -СОСТАВ ИЗДЕЛИЯ(уровень вхождения 15+) основные таблицы -м01 -(куда, что, применяемость ) количество что в куда -м40 -наименования деталей/сборок расчетная таблица -м05- (изделие, деталь/сборка, комплектация) количество на изделие любая подсборка (или детали россыпью или группа изделий) могла быть объявлена изделием и просчитана как обычное изделие(трудоемкость, расценки, материалы, на план,...) + динамический поиск по части гравировки, наименования, цех, изделие, группа изделий, извещение иб изменении и т.д) и переходом вверх и вниз по иерархии(что входит в рассматриваемую единицу или куда она входит) устраивала всех : и цеховиков и технологов/конструкторов(хотя у них было и свое дерево) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 10:07 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, Извините, но из вашего поста я смог понять только, что изпользовался один из вариантов предрасчета - табл М05 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 10:29 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА ..... основные таблицы -м01 -(куда, что, применяемость ) количество что в куда -м40 -наименования деталей/сборок 'детали и сборки суть разные вещи расчетная таблица -м05- (изделие, деталь/сборка, комплектация) количество на изделие ..... Изделие 1:М Сборка 1:М деталь и тривиальный DCOUNT подсчитает число сборок в изделии или число деталей в сборке\изделии-без самописной(и,в данном случае,не оправданно объемной) функции + запрос ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 10:44 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Гляньте. Это выборка с некими изменениями из работающей БД-возможны "хвосты" не используемых в примере процедур-разберетесь сами ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 11:40 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
sdku, Вы это к чему???? Я вообще не понял как это относится к заданному вопросу ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 11:46 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311 А вот красного я не понял... У меня сейчас в таблице уже есть code - код узла, и own - код вышестоящего узла... Как использование доп таблицы может мне помочь? Из этой таблицы ты по заданному узлу гребёшь сразу все его составляющие одним простейшим запросом (WHERE номер узла в пути к корню = заданный номер). Ведь, как я понимаю, тебе надо не к корню идти для подсчёта количества, а наоборот, "против шерсти", к конечным узлам. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 12:15 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Akina, я к сожалению опять не понял... где отличия.. Код: vbnet 1.
Вот этот рекордсет как раз собирает все узлы в цепочке к вершине... и я иду от корней к вершине.... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 12:28 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311 sdku, Вы это к чему???? Я вообще не понял как это относится к заданному вопросу Serg197311 ..Требуется: максимально быстро подсчитать количество всех деталей для определенной подсборки... изделие\" ну типа 232669-232652-261960-232651-1" > сборкиВсоставеИзделия > деталиВсоставеСборки. Источником для построения дерева будет запрос на этих таблицах. Как-то так.... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 16:51 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
sdku Как-то так.... SDKU, я там добавил табличку со структурой одного изделия. поля с путем и уровнем вхождения удалил, что бы не мешали тебе. Очень прошу, сделай то о чем ты думаешь - так как понять я тебя не могу. Более того, давай поспорим - чья схема обеспечит более высокое быстродействие при выполнении описанной выше задачи. Я при всех делаю ставку в 3000 р что моя. Или делай ответную ставку и доказывай - или не засоряй тему больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 07:30 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Только без предрасчета - с ним я и сам могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 09:14 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311, Результат анализа таблицы MAIN1Имя поляформатразмерЭто просто счетчикcodeДлинное целое4Куда входит – ссылка на счетчик родителяOWNДлинное целое4Конкретное изделие – т.е. на подобные изделия/сборки видимо повторяется вся структура сборок/деталейsernnДлинное целое4Что входит – ссылка на таблицу реальных элементовcodeverДлинное целое4применяемостьqtДвойное с плавающей точкой8 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 09:52 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, Спасибо! заметил, что с давнего времени у меня там количество - двойное с плав точкой! когда-то была идея заносить в эту структуру еще и материалы( в сборочных чертежах иногда указывается) и с тех пор забыл поменять! сейчас поменяю на integer! А так - все верно, поля имеют именно такой смысл! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 10:42 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Отлично! теперь вместо 30 сек запрос выполняется 19! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 10:52 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311, а если так? Код: sql 1.
ну и не забываем про индекс на поле MAIn1!code ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 11:39 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Serg197311 давнего времени у меня там количество - двойное с плав точкой! оно и должно быть дробным - например 1 упаковочный ящик на 8 изделий наст применяемость 0,125 у меня 4 дробных разряда и время выполнения 1 сек - правда я перевела вашу таблицу в свою структуру ваша таблица раскручивается в рабочую таблицу из 53400 строк, затем суммировка и навигация вверх/вниз конечно надо проверить, не задвоились ли строки(что-то многовато 53т) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 11:49 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА Serg197311 давнего времени у меня там количество - двойное с плав точкой! оно и должно быть дробным - например 1 упаковочный ящик на 8 изделий дает применяемость 0,125 у меня 4 дробных разряда и время выполнения 1 сек - правда я перевела вашу таблицу в свою структуру ваша таблица раскручивается в рабочую таблицу из 53400 строк, затем суммировка и навигация вверх/вниз конечно надо проверить, не задвоились ли строки(что-то многовато 53т) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 11:52 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА - правда я перевела вашу таблицу в свою структуру а можно ее увидеть? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 11:58 |
|
Оптимизация
|
|||
---|---|---|---|
#18+
Swa111 Serg197311, а если так? ну и не забываем про индекс на поле MAIn1!code То же не понял... этот запрос выдаст минимальное количество в узлах на пути к вершине... А мне надо перемножить все количества в узлах... Main1!code- ключевое поле, счетчик ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2021, 12:02 |
|
|
start [/forum/topic.php?fid=45&msg=40082930&tid=1609648]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
129ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 247ms |
total: | 487ms |
0 / 0 |