|
Минутка рефакторинга. Как правильнее? | ☑ | ||
---|---|---|---|---|
0
Галахад
гуру
30.12.22
✎
10:24
|
Выбрать
Т.А Из РС.СрезПоследних(, Б > 10) КАК Т vs Выбрать Т.А Из РС.СрезПоследних(,) КАК Т Где Т.Б > 10 И почему? |
|||
1
vicof
30.12.22
✎
10:27
|
Б > 10 плохо. Но если оставить, в первом случае лучше, потому что отбор будет накладываться раньше, и данных будешь получать меньше.
|
|||
2
NorthWind
30.12.22
✎
10:27
|
где-то читал, что условия в параметрах ВТ - это кошернее, чем снаружи. Но пруфа не будет.
|
|||
3
Asmody
30.12.22
✎
10:27
|
(0) зависит от того, что такое Б и что ты хочешь получить в итоге
|
|||
4
Aleksey
30.12.22
✎
10:28
|
Работает правильно? Значит и так и так правильно
|
|||
5
SleepyHead
гуру
30.12.22
✎
10:29
|
(2) В первом случае сначала строится таблица среза из записей регистра, где Б>10.
Во втором случае строится срез из всех записей. и к нему применяется условие. Логично, что условия в параметрах кошернее. |
|||
6
Asmody
30.12.22
✎
10:29
|
||||
7
Aleksey
30.12.22
✎
10:29
|
А то напридумают кучу глупых правил, типа а давайте не использовать select в запросах, ибо это не правильно. И потом бегают с этими правилами как со списанной торбой
|
|||
8
unenu
30.12.22
✎
10:30
|
(1) по факту, ГДЕ в срезах работает не медлееннее, а то и быстрее. тестил на рс с миллионами строк.
насчет оборотных регитсров хз. адепты 1с жонглируют постулатом: "отбор будет накладываться раньше". хотя, думаю, многое зависит от СУБД а не от 1с-постулатов) |
|||
9
Aleksey
30.12.22
✎
10:30
|
(5) сам придумал, или sql профайлердействительно так раскладывает эти зарпосы
|
|||
10
Garykom
гуру
30.12.22
✎
10:31
|
(0) Если мало значений но часто меняются то 1-й
Если значений много но редко меняются то 2-й |
|||
11
NorthWind
30.12.22
✎
10:31
|
(4) я в свое время занимался подобными извращениями на скуле - когда в таблице есть столбец дат и нужно подобрать такую запись в периоде, которая была бы первой или последней или какой-нибудь там еще. Запрос выходит очень нехороший, ресурсоемкий. Поэтому когда данных много, работать может по-разному.
|
|||
12
Dmitry1c
30.12.22
✎
10:34
|
(8) а ты попробуй поставить флажки "Разрешить итоги: срез последних"
|
|||
13
Dmitry1c
30.12.22
✎
10:34
|
а в оборотных регистрах надо в индекс попасть при отборе
|
|||
14
Fish
30.12.22
✎
10:37
|
(0) Например, если у тебя в регистре 2 записи:
1. Б = 15 2. Б = 2 то первый вариант вернет тебе запись 1, а второй вариант - ничего. Как правильней - тебе решать. |
|||
15
Megas
30.12.22
✎
10:38
|
А разве результат будет не разный?
Например записи 1 12 2 В первом условии выберется 12 во втором не выбирается нечего. |
|||
16
vde69
30.12.22
✎
10:38
|
(0) если условие одиночное или попадает в индексы то однозначно нужен варианта
Т.А Из РС.СрезПоследних(, Б > 10) КАК Т а вот если условий несколько или одно из условий не попадает в индекс, то тут уже есть варианты и они зависят от конкретного плана запроса (а это зависит и от статистики и от оптимизаторов, то есть мы на это не сильно можем влиять): вариант 1: можно выделить часть условий которые точно в индексе и отсекут большую часть данных то делаем так Выбрать Т.А Из РС.СрезПоследних(,УсловияКоторыеТочноВИндексе) КАК Т Где ОстальныеУсловия вариант 2: можно выделить часть условий которые точно в индексе но они не отсекут большую часть данных, это самый сложный вариант и он зависит от настроек сервера и количества данных в таблицах, можно применять и вариант 1 и вариант 3 вариант 3: нельзя выделить часть условий которые точно в индексе Выбрать Т.А Из РС.СрезПоследних(,ВсеУсловия) КАК Т |
|||
17
Garykom
гуру
30.12.22
✎
10:44
|
(14) (15) вероятно предполагается что Б не ресурс РС а просто реквизит
|
|||
18
Галахад
гуру
30.12.22
✎
10:49
|
(1), (3), (14), (15) В теме. :-)
|
|||
19
Fish
30.12.22
✎
10:51
|
(17) С реквизитом будет так же.
|
|||
20
Garykom
гуру
30.12.22
✎
10:54
|
(19) Почему это?
Если Б не меняется |
|||
21
Garykom
гуру
30.12.22
✎
10:56
|
(18) Эээ изначально я подумал что одинаковы по выдаче, разница только в оптимизации быстродействия
Если они выдают разное какой к черту рефакторинг? Это правка багов! |
|||
22
Галахад
гуру
30.12.22
✎
11:06
|
(21) Не обязательно выдают, но могут. :-)
|
|||
23
Garykom
гуру
30.12.22
✎
11:07
|
(22) Тогда согласен с (3) и в (0) недостаточно данных для ответа
|
|||
24
Bigbro
30.12.22
✎
11:08
|
кажется у гилева ровно такой пример разбирался.
|
|||
25
Garykom
гуру
30.12.22
✎
11:08
|
(23)+ Но я исходил из понимания слова рефакторинг
|
|||
26
Fish
30.12.22
✎
11:08
|
(20) Если значение Б одинаковое во всех записях с одинаковыми измерениями, то и результат будет одинаковый.
|
|||
27
Garykom
гуру
30.12.22
✎
11:10
|
(26) И тогда см (10), согласен?
|
|||
28
PR
30.12.22
✎
11:21
|
Мда, почему-то еще никто (кроме витиеватого (3)) не сказал, что все зависит от того, что такое Б
Если Б — измерение, то конечно же верен первый вариант Если же Б — ресурс, то только второй вариант Пример с курсами валют Отбор по валюте (измерение) нужно делать в ПВТ, в итоге получим одну запись с курсом отобранной валюты Отбор по курсу (ресурс) нужно делать в ГДЕ, в итоге получим записи со всеми валютами, где курс равен заданному в отборе По измерению отбор можно делать и в ПВТ и в ГДЕ, просто в ПВТ должно быть быстрее, потому что сначала все отбирается, а потом уже выбирается, а не сначала все выбирается, а потом уже отбирается А вот по ресурсу можно только в ГДЕ, потому что если сделать отбор в ПВТ, то срез будет не по всем записям, а только по тем, где курс равен заданному Пример неправильного отбора в ПВТ по курсу
При отборе по курсу, равному 30, должно выдаться ноль записей, потому что нет валют, с текущим курсом, равным 30 А выдастся в итоге одна запись, потому что срез построится только по первой записи |
|||
29
Галахад
гуру
30.12.22
✎
11:23
|
(28) Отличный разбор!
Витиеватый (3) дал ссылку (7), где есть подробоности. |
|||
30
mistеr
30.12.22
✎
11:25
|
(0) "Рефакторить" такие вещи вообще неправильно. Переписывание запросов ради красоты или абстрактной "правильности" это зло.
|
|||
31
PR
30.12.22
✎
11:26
|
(29) Не (7), а (6)
И ссылку лучше бы на ИТС дать, где-то была вроде у них записулька на эту тему, не могу найти |
|||
32
mistеr
30.12.22
✎
11:27
|
Работает хорощо — не трожь. Стало работать плохо — пойим почему и потом исправляй соответственно.
Если уж руки чешутся, порефактори код проверки заполнения и т.п. |
|||
33
Fish
30.12.22
✎
11:29
|
(27) Нет, потому что результат будет разный. См (14)
|
|||
34
Garykom
гуру
30.12.22
✎
11:31
|
(33) Если результат разный то это не рефакторинг а хрень какая то
|
|||
35
Fish
30.12.22
✎
11:32
|
(34) Результат будет одинаков, только если Б - это измерение.
|
|||
36
Garykom
гуру
30.12.22
✎
11:33
|
У меня к ТС претензия что в заголовке ошибочно указал РЕФАКТОРИНГ, чем вводит в заблуждение
А так отличная задачка на собеседовании, если переформулировать |
|||
37
Garykom
гуру
30.12.22
✎
11:33
|
(35) И тогда (10) же
|
|||
38
Fish
30.12.22
✎
11:36
|
(37) Имхо, тогда лучше вариант 1.
|
|||
39
Ботаник Гарден Меран
30.12.22
✎
11:39
|
Эту ветку нужно сохранить для обсуждений, кому сколько и за что платят, в т.ч. отметившимся аксакалам.
|
|||
40
Garykom
гуру
30.12.22
✎
11:42
|
(38) Уверен?
Представь что одно значение ежесекундно меняют-перезаписывают на тоже самое, и? Вариант 1 в этом случае куча проверок на условие, в отличие от варианта 2 где возьмет 1 последнюю по срезу и один раз проверит на условие |
|||
41
vde69
30.12.22
✎
11:44
|
(39) сабж из разряда:
на березе 3 ветки на каждой из ветор по 2 прутика на каждом прутике по 3 яблока сколько всего яблок? правильным будут сразу 2 ответа 1. 0 (на березе яблоки не растут) 2. 9 (если мы абстрагируемся от конкретики и будем рассматривать мат модель) |
|||
42
Fish
30.12.22
✎
11:48
|
(40) Ты пытаешься сказать, что если у нас в какой-то регистр писали 1 раз в день, а потом стали писать 10 раз в день (условно), то при этом нужно менять код программы? Имхо, код не должен зависеть от такого.
"Вариант 1 в этом случае куча проверок на условие, в отличие от варианта 2 где возьмет 1 последнюю по срезу и один раз проверит на условие" - Мне кажется, фигня какая-то. Частота перезаписывания тут никак не должна влиять на скорость. |
|||
43
Fish
30.12.22
✎
11:50
|
(41) "правильным будут сразу 2 ответа 1. 0 (на березе яблоки не растут)" - Первый ответ не будет правильным. В условии не сказано, что прутики выросли на берёзе, а яблоки - на прутиках. К веткам берёзы вполне могут быть привязаны прутики, на которые нанизаны яблоки. Условиям задачи это не противоречит.
|
|||
44
Garykom
гуру
30.12.22
✎
11:51
|
(42) >регистр писали 1 раз в день, а потом стали писать 10 раз в день (условно), то при этом нужно менять код программы?
Верно! Довольно кстати частая ситуация, когда на мало данных работает а стало на порядок больше и привет |
|||
45
Fish
30.12.22
✎
11:53
|
(44) По мне, так нужно сразу писать код правильно, чтобы он не зависел от объёма данных, а не быдлокодить, лишь бы побыстрее, чтобы потом переписывать код.
|
|||
46
Garykom
гуру
30.12.22
✎
11:54
|
(45) Это невозможно на практике
Ибо нет ресурсов (времени, денег) и знаний будущего |
|||
47
FirstLine Support
30.12.22
✎
11:55
|
сколько водки не бери, всё равно два раза бегать, сколько правильно не пиши, всё равно тестировать
|
|||
48
Fish
30.12.22
✎
11:58
|
(46) "Это невозможно на практике" - Невозможно не быдлокодить? Для некоторых - возможно. А у многих получается.
|
|||
49
Garykom
гуру
30.12.22
✎
11:59
|
(47) ну так то TDD придуман, хотя он не дает 100% покрытия
|
|||
50
SleepyHead
гуру
30.12.22
✎
12:03
|
(9) Когда-то и я учился на курсы-1-рф, и там так поясняли. Думаешь, зря поверил? ))
|
|||
51
Garykom
гуру
30.12.22
✎
12:05
|
(48) https://1c-h.ru/2019/02/04/1с-программисту-максимальное-количес/
быдлокод с ограничением по объему данных? |
|||
52
Fish
30.12.22
✎
12:06
|
(51) У меня эта ссылка не открывается, так что ничего не могу сказать.
|
|||
53
Garykom
гуру
30.12.22
✎
12:07
|
||||
54
Garykom
гуру
30.12.22
✎
12:07
|
(48) Реально обозвал разработчиков платформы 1С "быдлокодерами"?
|
|||
55
Ботаник Гарден Меран
30.12.22
✎
12:24
|
(54)
В УХе так. Тугамент и гроздья регистров. А табличных частей нет. |
|||
56
Fish
30.12.22
✎
12:24
|
(53) А какое отношение это имеет в твоему (10)? Ты серьёзно не понимаешь?
|
|||
57
Fish
30.12.22
✎
12:24
|
(54) В каком месте?
|
|||
58
Ботаник Гарден Меран
30.12.22
✎
12:25
|
(54)
А еще я помню итоги на справочниках в ЗиК1. И конфигурацию Учет ОС на компоненте расчета. |
|||
59
Lama12
30.12.22
✎
12:26
|
(0) Результаты будут разные.
|
|||
60
Garykom
гуру
30.12.22
✎
12:27
|
(56) Оно имеет отношение к твоему:
(45) "По мне, так нужно сразу писать код правильно, чтобы он не зависел от объёма данных, а не быдлокодить, лишь бы побыстрее, чтобы потом переписывать код." и (48) "Невозможно не быдлокодить? Для некоторых - возможно. А у многих получается." |
|||
61
Ботаник Гарден Меран
30.12.22
✎
12:30
|
Если поставлена задача "быдлокодить" - нужно быдлокодить.
Видел конфликты начальства с программистами, когда последние "умничали". Если заказчик хочет "китайское" качество, исполнитель не должен перерабатывать за бесплатно. |
|||
62
Fish
30.12.22
✎
12:31
|
(60) И? Я не понимаю полёта твоей мысли.
|
|||
63
Fish
30.12.22
✎
12:32
|
(61) "Если поставлена задача "быдлокодить" - нужно быдлокодить." - А по мне, если тебе ставят такие задачи, то нужно валить. Хотя кому-то, наверное, даже понравится.
|
|||
64
mistеr
30.12.22
✎
12:36
|
(62) Слова "преждевременная оптимизация" знакомы?
|
|||
65
Garykom
гуру
30.12.22
✎
12:41
|
(63) Ты извини или дауншифтер или зазвезился
Потому что обычным людям кредиты/ипотеки/дети да и просто кушать хочется |
|||
66
Fish
30.12.22
✎
12:42
|
(64) Какое это отношение имеет к задаче в (0)? Ту всё однозначно, имхо. А если человек из (10) готов переписывать один и тот же код каждый день, если по чётным числам проводят много документов, а по нечётным - мало, то это его выбор.
|
|||
67
vde69
30.12.22
✎
13:38
|
(65) я согласен с (63) если меня просят набыдлокодить и забыть я скорее всего не буду этим заниматься, и дальше если начальство адекватное оно занимае мою позицию в противном случае мы расстаёмся.
И при этом я никогда не жаловался на "кушать хочется" |
|||
68
Megas
30.12.22
✎
13:53
|
(66) Вообще бывает же архитектура/код который быстро можно написать к примеру за 10 часов и оно даже будет работать, но при больших данных нагнётся. Или написать за пару недель витьевато, сложно, но оно будет работать на любых данных, при этом это займёт пару недель.
Но написать нужно "вчера" так как аналитики проспали все сроки и без этого кода отгрузки встанут. |
|||
69
Megas
30.12.22
✎
13:57
|
+(66) При этом простой код легче отлаживать.
А если это какой-нибудь сервис типа Честного Знака с которым не понятно как работать (сейчас понятно, а год назад документация не соответствовала действительности), то я к примеру делаю в две итерации - 1 - простой код, 2 - сложный код. Так же помним о людях на складе которых легче приучить к простым действиям и усложнить, чем сразу к сложным действия. Хотя у них и с простыми то проблемы. |
|||
70
vde69
30.12.22
✎
14:23
|
(68) аналитики "проспали" - это их проблемы, почему я должен их проблемы перекладывать на себя (у возникнут проблемы в бедующем).
Один раз отгрузки встанут (пусть не на неделю а всего на полдня) и это решит вопрос на будущее с "проспали" |
|||
71
timurhv
30.12.22
✎
14:41
|
(0) Имхо, без разницы, профайлер надо смотреть, но думаю в обоих случаях будут прочитаны все записи итогов (если они есть). Индексация вряд ли включена по числовому измерению, а если включена - ошибка в структуре регистра, надо исправить измерения.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |