1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
|
|
1 | |
Как Быстро Выполняется Запрос В Большой Базе27.10.2012, 17:14. Показов 13103. Ответов 14
Метки нет (Все метки)
Представим себе базку с документооборотом 50-100 документов в день. Пусть учет ведется 2 года.
Есть вид документов с признаком "Исполнен/Нет". И вот человеку надо выбрать все не исполненные. Причем дата у них может быть и древняя. ну может ограничусь последним годом. Как быстро отработает запрос по поиску таких документов? Хватит 2-3 секунд? Стоит ли этот реквизит индексировать? Или думать над более изощренным механизмом типа регистр сведений.
0
|
27.10.2012, 17:14 | |
Ответы с готовыми решениями:
14
Запрос (INSERT) успешно выполняется 88 раз, но по факту в базе находится только 5 строк. КАК? Не выполняется запрос к базе Не выполняется запрос к базе данных Как быстро загрузить большой СписокВыбора? |
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
|
|
28.10.2012, 04:35 | 2 |
Проверил.
Примерно 50 документов вида Заказ-наряд в день (документ огромный - около 70 рекв. шапки). Базе год и 2 месяца. Реквизит "Закрыт" типа булево. Неидексируемый. У большинства документов значение "Истина". В консоле запрос по закрытым выполнился за 1-2 секунды. Правда в режиме одного пользователя на локальной SQL копии.
0
|
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
|
|
28.10.2012, 11:58 | 3 |
unknown181538, конфигурация "Альфа-Авто"?
Дайнеко, а почему регистр сведений? Может тогда регистр накопления, а к нему "исполняющий" документ тогда еще прикрутить? Перебирать документы - как-то не совсем красиво, ИМХО.
0
|
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
|
|
28.10.2012, 19:19 | 4 |
Сообщение от Darlock
Сообщение от Darlock
Кстати, подозреваю, что при любом раскладе дальнейшая обработка запроса будет занимать гораздо больше времени.
0
|
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
|
|
29.10.2012, 19:24 | 5 |
Сообщение от Darlock
А с регистром сведений можно было бы устроить игру по правилам: * ставиться на контроль - проведение вносит документ в регистр * снимается с контроля - перепроводится документ без записи в регистр, т.о. старая запись убирается. Получится, что регистр будет содержать готовый перечень "висящих" на контроле. Разумеется, выборка по нему будет мгновенной. Я вот и думаю стоит ли затевать, если время 1-2 секунды приемлемо даже для примитивной выборки. Так что спасибо ответившим.
0
|
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
|
|
30.10.2012, 08:43 | 6 |
1-2 секунды - это в консоли, т.е. вместе с выводом результата.
И вообще, как будет обрабатываться результат запроса? Я не понимаю, о чем вы все.
0
|
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
|
|
31.10.2012, 10:35 | 7 |
Сообщение от unknown181538
Задача минимально проста. Пришел утром на работу начальник цеха. Говорит компу: "Дай мне список Не исполненных заказов. Всех (в смысле независимо от даты". Вот и думаю, достаточно ли простого запроса.
0
|
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
|
|
31.10.2012, 15:50 | 8 |
Сообщение от Дайнеко
Если я делаю в списке отбор по периоду, разве это не запрос с отбором по реквизиту? Если мы сделаем регистр сведений, то придется делать соединение для получение реквизитов документа? Завтра попробую сделать точное измерение именно запроса и в рабочее время)
0
|
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
|
|
06.11.2012, 15:31 | 9 |
Попробую забить гвоздь в тему.
Код: Код ( (Unknown Language)): &НаСервере Процедура НаСервере(ТабДок) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕССЫЛКИ(ЭА_ЗаказНаряд.Ссылка) КАК пр |ИЗ | Документ.ЭА_ЗаказНаряд КАК ЭА_ЗаказНаряд |ГДЕ | НЕ ЭА_ЗаказНаряд.Закрыт"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ЭА_Сообщить(ТабДок,Выборка.Пр,1); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) ТабДок = Новый ТабличныйДокумент; НаСервере(ТабДок); ЭА_ПоказатьСообщения(ТабДок); КонецПроцедуры ЭА_Сообщить() выводит секцию таб дока. Правда неоптимально - макет получается в цикле, и области тоже. Выкладываю замер производительности. Видим, что запрос выполняется 0.01 с. В несколько раз быстрее, чем ТабДок.Показать().
0
|
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
|
|
08.11.2012, 00:52 | 10 |
Нихт, ИМХО.
1. Обращение в запросе к реальной таблице документов 2. Обращение в запросе к реальной таблице документов (если не проводной), то без ограничений на пометку удаления. Опять же - по идее: Документ должен быть проводной, следовательно должны быть регистры в которых документ регистратор.
0
|
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
|
|
08.11.2012, 17:24 | 11 |
Сообщение от Darlock
Запрос к реальной таблице регистра сведений с соединением с таблицей документа для получения реквизитов чем-то лучше? Плодим лишние сущности для того, чтобы сэкономить 0.01 с или для выполнения догм? Повторю вопрос, отображение списка документов - это не запрос к реальной таблице? К тому же, запрос к виртуальной таблице как правило - соединение таблиц, т.е. менее предпочтителен, мы же не остатки считаем. Вообще, не видел нигде в типовых никаких регистров для вывода реестров. Регистры есть, но документ может и не иметь движений. Да и если бы были, обращаться к регистру накопления для отбора по реквизиту документа? Предложите свой код.
0
|
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
|
|
08.11.2012, 22:21 | 12 |
Сообщение от unknown181538
0
|
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
|
|
11.11.2012, 20:42 | 13 |
unknown181538, стоп. Давайте не будем путать "х*й с трамвайной ручкой".
1. Список документов или виртуальная таблица - безусловно запрос реальной таблице, но выполненный платформой. А это большая разница. Во-вторых никогда не говори "никогда" (про пометку удаления). В-третьих: изначально был вопрос про выбор документов которые не исполнены. Исполненность указывается руками в прошлых периодах? Странно. 4. Мы гонимся за "как быстрее" или как правильно писать код? Если как быстрее, тогда да, давайте в циклах пускать запросы по физическим таблицам. Мой фрагмент кода - ... а я не знаю, что именно вы уже хотите получить. Тупо отобрать - индекс на "исполненность" и далее "отбор" по этому полю. Этот "фрагмент" тупо - форма списка по неведомому реквизиту исполненности.
0
|
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
|
|
12.11.2012, 05:11 | 14 |
"Во-вторых никогда не говори "никогда" (про пометку удаления)."
Ее невозможно поставить руками. И это было еще в базе 7.7 сколько -то лет назад. "1. Список документов или виртуальная таблица - безусловно запрос реальной таблице, но выполненный платформой. А это большая разница. " А этот запрос выполняется не платформой? "В-третьих: изначально был вопрос про выбор документов которые не исполнены. Исполненность указывается руками в прошлых периодах? Странно." У меня при простановке исполненности документ переезжает на текущую дату. Неисполненный может быть в любом периоде. "4. Мы гонимся за "как быстрее" или как правильно писать код? Если как быстрее, тогда да, давайте в циклах пускать запросы по физическим таблицам." Гонимся много за чем. Например, запись в лишний регистр сведений - лишнее время при проведении. Лишний код и лишний объект - это тоже жертва. В данном случае неоправданная. "Тупо отобрать - индекс на "исполненность" и далее "отбор" по этому полю. Этот "фрагмент" тупо - форма списка по неведомому реквизиту исполненности." Я опять не понимаю. Чем это отличаетс от моего варианта?
0
|
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
|
|
12.11.2012, 13:19 | 15 |
Спор ниочем. Поступайте как считаете нужным.
0
|
12.11.2012, 13:19 | |
12.11.2012, 13:19 | |
Помогаю со студенческими работами здесь
15
Как быстро отсортировать большой массив? Как Быстро Загрузить Большой Списоквыбора? Как быстро добавить в WinRar большой файл Как максимально быстро считать очень большой текст из файла Как быстро проверить, что строка начинается с большой буквы FadeIn() при первом клике не выполняется а быстро появляется текст, как show()> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |