Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Сколько будет запросов к базе (тестовое задание)

Сколько будет запросов к базе (тестовое задание)
Я
   sogle
 
24.03.18 - 09:55
При поиске работы наткнулся на контору с "высокими требованиями и низкой зарплатой", как это обычно бывает.
Один вопрос "со звездочкой" из их анкеты меня заинтересовал.
Вопрос:Сколько запросов будет в трассировщике БД (обращений к БД)?
Запрос.Текст="
ВЫБРАТЬ 
ПЕРВЫЕ 1
 СкидочныеКарты.Ссылка
ИЗ Справочник.СкидочныеКарты как СкидочныеКарты
ГДЕ СкидочныеКарты.КодКарты=&КодКарты
";
Запрос.УстановитьПараметр("КодКарты","КакойТоТамКодСтрокой");
Ответ: 1 или минимум 2.
1 - тут ежу все понятно, это когда КодКарты это просто строка.
2 - это когда КодКарты элемент Справочника или Перечисление
2 и более это что СоставнойТип чтоли?
 
 
   Asmody
 
1 - 24.03.18 - 10:29
(0) Исходим из того, что в коде нет ошибок. Тогда не может там быть КодКарты нестрокой.
   Cool_Profi
 
2 - 24.03.18 - 10:40
(1) Это почему?
   shuhard
 
3 - 24.03.18 - 10:51
(2) "КакойТоТамКодСтрокой"
   sogle
 
4 - 24.03.18 - 10:59
В процедуру Запрос.УстановитьПараметр("КодКарты","КакойТоТамКодСтрокой");
передается код в виде строки
   triviumfan
 
5 - 24.03.18 - 12:04
у меня один вопрос: что за бред только что прочитал?
   H A D G E H O G s
 
6 - 24.03.18 - 12:08
(5) Я подозреваю, что там смысл - не в количестве запросов, а в количестве чтений данных и индексов.
   toypaul
 
7 - 24.03.18 - 12:11
1 запрос в любом случае. запросов относящихся к данному коду

хотя ... возможен вариант, что первым запросом

будет подготовка, а вторым выполнение с параметрами
   nva_15
 
8 - 24.03.18 - 12:23
Выражение ГДЕ дает еще один запрос. Так что ответ 2.
   vde69
 
9 - 24.03.18 - 12:25
запрос к ДАННЫМ будет только один, и он будет из хранимой процедуры а не прямой....

1с давно перешла от прямых вызовов к безопасным чепез ХП


а вообще вопрос глупый, как минимум платворма важна и РЛС
   Aleksandr N
 
10 - 24.03.18 - 12:25
(0) 42
 
 Рекламное место пустует
   vde69
 
11 - 24.03.18 - 12:26
и еще вопрос - какая субд, уверен в оракле и постгре могут быть нюансы
   VS-1976
 
12 - 24.03.18 - 12:39
Будет всего 1 запрос. Никаких неявных запросов тут нет
   sogle
 
13 - 25.03.18 - 08:03
Спасибо всем за комменты. Понял что составитель этого теста не совсем адекватен. Задавать такие вопросы на позицию в 60тыс по МСК это дибилизм.
   МимохожийОднако
 
14 - 25.03.18 - 08:23
(13) Тест не прошёл?
   sogle
 
15 - 25.03.18 - 08:46
(14)Да и хорошо что не прошел. Зачем с такими неадекватами работать.
   ERWINS
 
16 - 25.03.18 - 08:52
1 запрос


Проверка доступности базы что то типа select 1

Второй запрос отсуствует, так как нет "выполнить" "выгрузить".
   ERWINS
 
17 - 25.03.18 - 08:54
даже одного не будет.
   ERWINS
 
18 - 25.03.18 - 08:54
(9) 1с не использует хранимые процедуры.
   shuhard
 
19 - 25.03.18 - 10:08
(18)[1с не использует хранимые процедуры.]
да ты чё:
8.3.10.2252 + MS SQL 12.0.4100.1(2014)+ тонкий клиент:
три запроса:
exec sp_executesql N'SELECT TOP 1
T1._IDRRef
FROM dbo._Reference10 T1
WHERE (T1._Fld11 = P1)',N'P1 nvarchar(4000)',N'Золотая'

exec sp_executesql N'SELECT
T1._Version
FROM dbo._Reference10 T1
WHERE T1._IDRRef = P1',N'P1 varbinary(16)',0x8488AC220BDA918F11E82FF8E1A9F1C6


exec sp_executesql N'SELECT
T2._IDRRef,
T2._Version,
T2._Marked,
T2._PredefinedID,
T2._Code,
T2._Description,
T2._Fld11
FROM dbo._Reference10 T2
WHERE T2._IDRRef = P1 AND T2._Version <> @P2',N'P1 varbinary(16),@P2 varbinary(8000)',0x8488AC220BDA918F11E82FF8E1A9F1C6,0x00000000000007D1
   shuhard
 
20 - 25.03.18 - 10:13
(19) +1
расширим выборку реквизитом:
ВЫБРАТЬ ПЕРВЫЕ 1
    СкидочныеКарты.Ссылка КАК Ссылка,
    СкидочныеКарты.КодКарты КАК КодКарты
ИЗ
    Справочник.СкидочныеКарты КАК СкидочныеКарты
ГДЕ
    СкидочныеКарты.КодКарты = &КодКарты

получим - выборку ссылки и реквизита, выборка версии, выборка данных 

exec sp_executesql N'SELECT TOP 1
T1._IDRRef,
T1._Fld11
FROM dbo._Reference10 T1
WHERE (T1._Fld11 = P1)',N'P1 nvarchar(4000)',N'Золотая'

exec sp_executesql N'SELECT
T1._Version
FROM dbo._Reference10 T1
WHERE T1._IDRRef = P1',N'P1 varbinary(16)',0x8488AC220BDA918F11E82FF8E1A9F1C6

exec sp_executesql N'SELECT
T2._IDRRef,
T2._Version,
T2._Marked,
T2._PredefinedID,
T2._Code,
T2._Description,
T2._Fld11
FROM dbo._Reference10 T2
WHERE T2._IDRRef = P1 AND T2._Version <> @P2',N'P1 varbinary(16),@P2 varbinary(8000)',0x8488AC220BDA918F11E82FF8E1A9F1C6,0x00000000000007D1
   shuhard
 
21 - 25.03.18 - 10:15
(20) +1
прямая выборка 
SELECT  [_IDRRef]
      ,[_Version]
      ,[_Marked]
      ,[_PredefinedID]
      ,[_Code]
      ,[_Description]
      ,[_Fld11]
  FROM [Кодинг].[dbo].[_Reference10]
даёт
_IDRRef    _Version    _Marked    _PredefinedID    _Code    _Description    _Fld11
0x8488AC220BDA918F11E82FF8E1A9F1C6    0x00000000000007D1    0x00    0x00000000000000000000000000000000    000000001    Золотая    Золотая
0x8488AC220BDA918F11E82FF8E1A9F1C7    0x00000000000007D2    0x00    0x00000000000000000000000000000000    000000002    Платиновая    Платиновая
   13Дима13
 
22 - 25.03.18 - 10:15
получается минимум 2 запроса, потому что еще выбирается версия?
   shuhard
 
23 - 25.03.18 - 10:19
(22) минимум 2, составитель теста вменяем в части кодирования,
60000 чудно, но возможно это позиция стажёра
   13Дима13
 
24 - 25.03.18 - 10:21
(23) я правильно понимаю: если выбирать из таблицы ссылку, то будет минимум 2 запроса, потому что отдельно выбирается версия объекта. Если выбирать реквизит справочника не ссылочного типа (например строковый), то запрос будет 1?
   shuhard
 
25 - 25.03.18 - 10:24
(24) угу, отказ от ссылки сокращает число выборок
ВЫБРАТЬ ПЕРВЫЕ 1
    СкидочныеКарты.КодКарты КАК КодКарты
ИЗ
    Справочник.СкидочныеКарты КАК СкидочныеКарты
ГДЕ
    СкидочныеКарты.КодКарты = &КодКарты

exec sp_executesql N'SELECT TOP 1
T1._Fld11
FROM dbo._Reference10 T1
WHERE (T1._Fld11 = P1)',N'P1 nvarchar(4000)',N'Золотая'
   shuhard
 
26 - 25.03.18 - 10:26
(25) ну и классическое Представление
ВЫБРАТЬ ПЕРВЫЕ 1
    СкидочныеКарты.КодКарты КАК КодКарты,
    СкидочныеКарты.Представление КАК Представление
ИЗ
    Справочник.СкидочныеКарты КАК СкидочныеКарты
ГДЕ
    СкидочныеКарты.КодКарты = &КодКарты

exec sp_executesql N'SELECT TOP 1
T1._Fld11,
T1._IDRRef,
T1._Description
FROM dbo._Reference10 T1
WHERE (T1._Fld11 = P1)',N'P1 nvarchar(4000)',N'Золотая'
   13Дима13
 
27 - 25.03.18 - 10:27
(25) то есть для оптимизации данного запроса, есть смысл в этот запрос добавить выборку версии, наименования, кода и тогда запрос будет 1? или все равно версия отдельно выбираться будет?
   shuhard
 
28 - 25.03.18 - 10:30
(27) отказ от ссылки и это многократно указано в документации, влечет сокращение выборки
ВЫБРАТЬ ПЕРВЫЕ 1
    СкидочныеКарты.ВерсияДанных КАК ВерсияДанных,
    СкидочныеКарты.ПометкаУдаления КАК ПометкаУдаления,
    СкидочныеКарты.Код КАК Код,
    СкидочныеКарты.Наименование КАК Наименование,
    СкидочныеКарты.КодКарты КАК КодКарты,
    СкидочныеКарты.Предопределенный КАК Предопределенный,
    СкидочныеКарты.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
    СкидочныеКарты.Представление КАК Представление
ИЗ
    Справочник.СкидочныеКарты КАК СкидочныеКарты
ГДЕ
    СкидочныеКарты.КодКарты = &КодКарты

exec sp_executesql N'SELECT TOP 1
T1._Version,
T1._Marked,
T1._Code,
T1._Description,
T1._Fld11,
CASE WHEN T1._PredefinedID > 0x00000000000000000000000000000000 THEN 0x01 ELSE 0x00 END,
T1._PredefinedID,
T1._IDRRef,
T1._Description
FROM dbo._Reference10 T1
WHERE (T1._Fld11 = P1)',N'P1 nvarchar(4000)',N'Золотая'
   13Дима13
 
29 - 25.03.18 - 10:31
(27) если в этот же запрос добавить ссылку сколько будет запросов?
   shuhard
 
30 - 25.03.18 - 10:35
(29) 3
ВЫБРАТЬ ПЕРВЫЕ 1
    СкидочныеКарты.ВерсияДанных КАК ВерсияДанных,
    СкидочныеКарты.ПометкаУдаления КАК ПометкаУдаления,
    СкидочныеКарты.Код КАК Код,
    СкидочныеКарты.Наименование КАК Наименование,
    СкидочныеКарты.КодКарты КАК КодКарты,
    СкидочныеКарты.Предопределенный КАК Предопределенный,
    СкидочныеКарты.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
    СкидочныеКарты.Представление КАК Представление,
    СкидочныеКарты.Ссылка КАК Ссылка
ИЗ
    Справочник.СкидочныеКарты КАК СкидочныеКарты
ГДЕ
    СкидочныеКарты.КодКарты = &КодКарты


exec sp_executesql N'SELECT TOP 1
T1._Version,
T1._Marked,
T1._Code,
T1._Description,
T1._Fld11,
CASE WHEN T1._PredefinedID > 0x00000000000000000000000000000000 THEN 0x01 ELSE 0x00 END,
T1._PredefinedID,
T1._IDRRef,
T1._Description,
T1._IDRRef
FROM dbo._Reference10 T1
WHERE (T1._Fld11 = P1)',N'P1 nvarchar(4000)',N'Золотая'

exec sp_executesql N'SELECT
T1._Version
FROM dbo._Reference10 T1
WHERE T1._IDRRef = P1',N'P1 varbinary(16)',0x8488AC220BDA918F11E82FF8E1A9F1C6

exec sp_executesql N'SELECT
T2._IDRRef,
T2._Version,
T2._Marked,
T2._PredefinedID,
T2._Code,
T2._Description,
T2._Fld11
FROM dbo._Reference10 T2
WHERE T2._IDRRef = P1 AND T2._Version <> @P2',N'P1 varbinary(16),@P2 varbinary(8000)',0x8488AC220BDA918F11E82FF8E1A9F1C6,0x00000000000007D1
   13Дима13
 
31 - 25.03.18 - 10:39
(30) не могу понять в чем смысл 3-его запроса, получается выбираются поля из этой же таблице, где версия данных не равна версии данных из 2-го запроса, но ссылки равны. Разве может в одной таблице храниться 2 записи с одинаковым значением ссылки, но с разным значением версии данных?
   shuhard
 
32 - 25.03.18 - 10:40
(31)[не могу понять ]
это твои проблемы
   vde69
 
33 - 25.03.18 - 15:40
(18) 1с только и использует ХП sp_executesql для всех селектов, точно не помню с какой версии, вроде с 8.2 это началось
(24) версионирование поддерживается только с 11 платформы

(0)
возможно сабж идет об трансяции запроса и просмотр результата в плане запросов?

или тут нюанс с РЛС ?

короче думаю сабж не имеет однозначного ответа, а предпологает, что кандидат начнет задавать вопросы
 
 
   sogle
 
34 - 26.03.18 - 09:43
Спасибо всем БОЛЬШОЕ за ответы. Этот вопрос проверял опыт работы с профайлером у кандидата.
   shuhard
 
35 - 26.03.18 - 09:44
(34) тяжёлый бред
   Широкий
 
36 - 26.03.18 - 09:49
Миминмум 2
Получение версии и собственно сам запрос. Если RLS - то может быть еще допом
Показ ссылки не выполняется - значит получение представления нет
   Широкий
 
37 - 26.03.18 - 09:55
+36 Хотя может быть и подъебкой.
"Запрос.Выполнить()" я не вижу


Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует