|
чем заменить НайтиСтроки() ? | ☑ | ||
---|---|---|---|---|
0
gosn1ck
19.06.12
✎
09:43
|
всем известно что у таблицы значений метод НайтиСтроки работает очень медленно, собственно вопрос: а чем его заменить?
|
|||
1
Irbis
19.06.12
✎
09:44
|
Запросом, но вряд ли быстрее будет
|
|||
2
Агент Инфостарта
19.06.12
✎
09:44
|
1. Запросом.
2. Перебором. |
|||
3
DrShad
19.06.12
✎
09:45
|
хрена себе очень медленно по сравнению с чем?
|
|||
4
Trier
19.06.12
✎
09:46
|
(2) Да уж, перебором очень выгодно заменять НайтиСтроки()...
|
|||
5
Buster007
19.06.12
✎
09:47
|
кому всем? и почему медленно?
|
|||
6
Нуф-Нуф
19.06.12
✎
09:48
|
и с чего это запрос будет медленее?
|
|||
7
gosn1ck
19.06.12
✎
09:48
|
операция выполняется 20тыс раз. запрос в цикле будет работать быстрее?
|
|||
8
DrShad
19.06.12
✎
09:49
|
(7) а накуя запрос в цикле? и с какого перепугу 20000 раз искать строки?
|
|||
9
Нуф-Нуф
19.06.12
✎
09:49
|
(7) фигасе подача. ты где в сабже про цикл говорил, индеец, а теперь что-то предъявляешь.
|
|||
10
Buster007
19.06.12
✎
09:50
|
(7) и много уходит на поиск? Проиндексируй ТЗ по тем полям по которым осуществляешь поиск и будет тебе счастье. У меня и на больших количествах всё летало.
|
|||
11
Cube
19.06.12
✎
09:51
|
(9) ))))))))))))))
+1 |
|||
12
Нуф-Нуф
19.06.12
✎
09:51
|
в любом случае (10) прав. запрос с индексами грамотнее НайтиСтроки, которые работают простым перебором
|
|||
13
gosn1ck
19.06.12
✎
09:52
|
окей спасибо
|
|||
14
andrewks
19.06.12
✎
09:52
|
добавить индексы ещё не предлагали?
|
|||
15
Ненавижу 1С
гуру
19.06.12
✎
09:52
|
НайтиСтроки не работает с условиями типа "Сумма>0 И НДС<>0"
|
|||
16
zinch
19.06.12
✎
10:36
|
Построитель
|
|||
17
H A D G E H O G s
19.06.12
✎
10:42
|
Индексы аутору могут и не помочь.
|
|||
18
H A D G E H O G s
19.06.12
✎
10:42
|
(12) Запрос идет ф топку.
|
|||
19
H A D G E H O G s
19.06.12
✎
10:44
|
20 тыс раз искать - это каким смелым надо быть... Тут один лишний раз заставишь по таблице сложно искать - задумаешься.
|
|||
20
Buster007
19.06.12
✎
10:50
|
(19) такое ощущение, что цифра в 20 тыс очень большая. Может быть стоит попробовать, а потом делать выводы?
У меня максимально где-то 65 тыс раз искалось причем методом НайтиСтроки(). Замедлений не обнаружено. |
|||
21
H A D G E H O G s
19.06.12
✎
10:54
|
(20) Если это ТЗ - кэш к примеру, и данные идут потоком, как при обмене - тогда хоть 100500 раз пусть ищется. В другом случае - надо смотреть алгоритм.
Зря так автор, зря зря зря. p.s. Я его разозлить пытаюсь, чтобы он код выложил, а мы бы посочувствовали. |
|||
22
experimentator76
19.06.12
✎
10:56
|
(0) давай уже рассказывай о чем цикл
найтистроки ищет в памяти, но тупой - то есть ищет по равно запросом создает ВТ в базе, в принципе скуль оптимизирует доступ к данным и не всегда чтение идет с диска кроме того запрос более гибкий по критериям отбора все зависит от задачи - возможно можно разбить ТЗ на готовые варианты без постоянного поиска по ней |
|||
23
Rovan
гуру
19.06.12
✎
10:57
|
(0) индексы + есть еще способ доп. кеширование найденных строк например в соответствие
это на случай если велика вероятность что по таким значениям поиск будет повторяться |
|||
24
H A D G E H O G s
19.06.12
✎
10:59
|
(23) Глупость.
|
|||
25
gosn1ck
20.06.12
✎
14:53
|
мне обработка в наследство досталась, очень клёвым образом выводит отчет-шахматка. алгоритм таков: 1) выборка по колонкам (складам) 2) выборка по строкам (номенклатуре) 3) ТЧ в которой имеются данные по продажам и остаткам (по каждому складу и остаткам). после того как данные получены делается перебор 1ой выборки в этом же цикле 2ой, а затем поиск нужных данных.
Пока ВыборкаСклад.Следующий() Цикл Пока ВыборкаНомен.Следующий() Цикл Отбор = Новый Структура; Отбор.Вставить("Номенклатура", ВыборкаНомен.Номенклатура); Отбор.Вставить("Склад", ВыборкаСклад.Склад); НайденнаяСтрока = ТЗГруппа.НайтиСтроки(Отбор); // вывод данных из найденных строк КонецЦикла; КонецЦикла; |
|||
26
gosn1ck
20.06.12
✎
14:55
|
вот всё это я и пытаюсь ускорить... кстати насчет индексов я так и не понял добавить нужные поля после ключевого слова "ИНДЕКСИРОВАТЬ ПО" в запросе или воспользоваться индексами конечного ТЗ?
|
|||
27
aleks-id
20.06.12
✎
14:55
|
какой шикарный копроалгоритм. в мемориз!
переписывай обработку и делай все запросом. |
|||
28
aleks-id
20.06.12
✎
14:57
|
кстати, на СКД такой отчет накидывается за 10 минут
|
|||
29
gosn1ck
20.06.12
✎
15:01
|
спасибо, но не всё так просто. я привел общий алгоритм как это работает.
|
|||
30
DimVad
20.06.12
✎
15:07
|
(26) Конечной ТЗ
|
|||
31
H A D G E H O G s
20.06.12
✎
15:10
|
ТЗГруппа.Индексы.Добавить("Склад");
ТЗГруппа.Индексы.Добавить("Номенклатура"); |
|||
32
H A D G E H O G s
20.06.12
✎
15:12
|
либо
Пока ВыборкаСклад.Следующий() Цикл СтруктураПоиска=Новый Структура; СтруктураПоиска.Вставить("Склад",ВыборкаСклад.Склад); МассивСтрок=ТЗГруппа.НайтиСтроки(СтруктураПоиска); ТЗГруппаПоСкладу=ТЗГруппа.Скопировать(МассивСтрок); Пока ВыборкаНомен.Следующий() Цикл Отбор = Новый Структура; Отбор.Вставить("Номенклатура", ВыборкаНомен.Номенклатура); НайденнаяСтрока = ТЗГруппаПоСкладу.НайтиСтроки(Отбор); // вывод данных из найденных строк КонецЦикла; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |