Pull to refresh

Comments 13

Первичный ключ был задан в исходной табличной переменной? Если это справочник, то, полагаю, он должен там быть.

Насколько я помню, то его не было. Количество строк из XML было не слишком большим, и, видимо, не вызывало проблем. В любом случае сейчас уже не приносит проблем, т.к теперь хранится в базе как обычная таблица (раньше подтягивалось из сервиса 1с)

Интересно понять что в XML справочнике и сколько строк он в таблице занимал. Когда нужно справочниких хранить которые актуальны некоторый промежуток времени (час-сутки-неделя-месяц) то я делал постоянную таблицу(таблицы) и туда их заносил. Конечно нужно слегка подумать над первичным ключем и правильной реализацией "протухания" сравочника но передавать его в запросе из клиента, насколько я понимаю это ваша ситуация, я бы точно не стал. Если справочник используется не для одноразовой выборки то он точно должен быть положен в постоянную таблицу.

Сейчас он действительно лежит в постоянной таблице, что сильно облегчает жизнь. До этого это была таблица с полем XML, в котором хранились разные справочники, и ключевое поле по названию. Обновление информации в таблице справочников происходило джобом из 1с сервиса раз в какое-то время. Видимо потребность в этой информации изначально была не очень большой (да и число записей изначально не предполагалось особо большим), но потом наросло. Функционал же - определение синонимов для объектов: код и название основного объекта, код и название замены.

Да, главная проблема с табличными переменными - это Estimated Number of Rows = 1. Если потом в плане идет какой-нибудь большой Join или Key Lookup, пиши пропало.

С временными таблицами в tempdb можно делать практически что угодно. Особенно удобно, что SQL Server по ним сам статистику успевает строить - Execution Plans получаются приличные. Если план строится не очень хороший, можно поэкспериментировать с индексами по временной таблице.

Только первичный ключ в момент создания

Не только - еще можно добавить уникальный ключ. Итого два индекса в момент создания

Спасибо за уточнение, дополнительный индекс действительно можно добавить, указав Unique constraint, тем самым заставить сервер создать для нас индекс.

Да любое количество индексов. С каждой новой версией этот функционал расширялся. Начиная с SQL Server 2016 (более старой версии нет в наличии) этот код работает

DECLARE @t TABLE
(c1 int INDEX IX_c1, 
 c2 int INDEX IX_c2, 
 c3 int INDEX IX_c3,
 INDEX IX_c1_c2_c3 (c1, c2, c3)
);
Какое удивительное совпадение, всего 2 комментария и оба отличные и оба к статьям zomblzum.

Но действительно совпадение, никому из знакомых не давал ссылки, сам вторых аккаунтов не имею. Может так понравилось человеку?)

Sign up to leave a comment.

Articles