|
|
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Подскажите пожалуйста как правильно написать индексы для таблиц КЛАДР расположенных на Microsoft SQL Server 2005? Или же есть другие способы увеличить скорость выполнения запросов к таблицам КЛАДР? В приложении используются запросы, вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2010, 10:48 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
заменить OR на union заменить left(CODE,11) на like или попробовать computed column index ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2010, 14:39 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
как вариант - indexed вью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2010, 14:40 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
ScareCrow заменить left(CODE,11) на like в первоначальном варианте использовалась инструкция - like, запрос выполнялся медленнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2010, 14:53 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
как вариант не использовать структуру КЛАДР "как есть", а рекструктуризовать в более удобный вид, например, 1С так и поступает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2010, 14:56 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Naf , хочу использовать КЛАДР как есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2010, 15:13 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_t Naf , хочу использовать КЛАДР как есть.Добавьте к исходной структуре всего один столбец - ParentID и сделайте обычно дерево. "Деревянные" запросы помогут избежать таких предикатов Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2010, 20:37 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Senya_L авторВычисляемые выражения, как известно, индексами не могут пользоваться. спасибо, что вовремя предупредили! Позвольте вопрос? Вычисляемые-это вида: Код: plaintext Код: plaintext авторДобавьте к исходной структуре всего один столбец - ParentID и сделайте обычно дерево. скажите пожалуйста можно это как то автоматически сделать? подскажите пожалуйста, как такое дерево создать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 07:54 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте zvezda_t!, в продолжении разговора про адреса: zvezda_t у меня есть кладр, но бывают случаи когда - хочешь - не хочешь приходиться адрес в ручную вбивать - ибо кладр не совершенен и некоторых адресов там нет. вот поэтому я решила сделать отдельную таблицу для тех адресов которые не нашлись по кладр - или лучше оставить дополнительные адресные поля в каждой из таблиц? Мы тогда решили, что лучше в одну таблицу адреса заводить. Но я так понимаю вы все равно из самого кладра запросы строите. Вам же не все адреса нужны, которые в кладре есть? Я так понимаю. Т.е. Вам нужно хранить только нужные адреса в Вашей таблице, включая те, которые в кладре есть и те которых там нет. И работать с ней, а не с кладром. Кладр используется только во время ввода данных в таблицу адресов. Например: - триггер или просто процедурка на проверку правильности ввода адресов. - представляет список улиц/областей и прочее на форме для ввода адреса. А так если отвечать на Ваш вопрос, то два пути: 1) при перекачке KLADR в таблицы добавить дополнительные поля, по которым вы и будете строить запросы 2) если не хочется корректировать структуру (что странно, при закачке ведь все равно...), то можно посложнее сделать добавить доп. таблицы : KLADR_EX id CODE - ссылка на кладр (по коду) tip - тип, по которому будет отсеиватся записи, можно еще другие поля добавить select * from dbo.kladr a inner join dbo.kladr_ex b on a.code = b.code where b.tip = ... Т.е для каждой таблицы кладра будет соответсвующая "теневая "таблица в котором будут вычесленные поля. На эти поля в любом из вариантов можно построить индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 12:01 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
авторМы тогда решили, что лучше в одну таблицу адреса заводить. Но я так понимаю вы все равно из самого кладра запросы строите. Вам же не все адреса нужны, которые в кладре есть? Я так понимаю. Т.е. Вам нужно хранить только нужные адреса в Вашей таблице, включая те, которые в кладре есть и те которых там нет. И работать с ней, а не с кладром. Да, я из самого КЛАДРа запросы строю, потому что есть необходимость адреса менять, и тогда вновь открывается форма ввода адреса с использованием кладра, но эта форма грузиться очень долго, потому что адреса извлекаются по ранее сохранённому коду, идет полная расшифровка адреса, плюс подгружаются варианты выбора для каждого из адресов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 12:29 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_t Да, я из самого КЛАДРа запросы строю Ну не совсем правильно это... Я живу в поселке, там 3 улицы. Представляете, если в проге, где будут только люди из моего поселка, будут постоянно выполнятся запросы с кладром, где море адресов. Это с проектной точки зрения неэффективно. Если есть таблица адресов (своя) где хранятся адреса для людей в базе, то нет смысла лазить в кладр. Вед в той таблице будут поля: КодГорода, НаименованиеГорода и.т.д. zvezda_t потому что есть необходимость адреса менять и тогда вновь открывается форма ввода адреса с использованием кладра, но эта форма грузиться очень долго, потому что адреса извлекаются по ранее сохранённому коду, идет полная расшифровка адреса, плюс подгружаются варианты выбора для каждого из адресов... Ну может проблема тут еще в неэффективной работы с кладром на форме выбора адреса. Тут примерно так: Выбирается в списке область - получаем код. Выбираем в списке город (отсеивается по области, т.е. показывем города только данной области) - получаем код. Т.е. пошагово, не надо грузить все города и улицы в элементы управления. Есть поле редактирования и справа некая кнопочка <...> по нажатию на которую выводится форма со списком. Во время нажатия на эту кнопочку происходить обращение к кладру. Коды выбранных адресов, сохраняются и происходить сверка и прочие проверки с кладром. При перекачке данных из кладра никто желательно не просто перекидывать таблички оттуда, а написать программу, которая постоит нужные дополнительные поля и индексы во врема алгоритма перекачки данных из кладра в Вашу базу... Тем более всякие "$region.$district.$city" вам явно не нужны, почему бы это не преобразовать при перекачке данных из кладра. Простите если чего не так сказал и за много слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 12:53 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
авторвычисляемые выражения, как известно, индексами не могут пользоваться. моя плакает горючими слезами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 14:34 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Да, пока Вы юзаете КЛАДР "как есть" клятая 1С прекрасно конвертирует его в свой регистр сведений с удобной разбивкой полей и их индексацией ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 15:00 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
http://sql.ru/forum/actualsearch.aspx?search=%CA%CB%C0%C4%D0+&sin=0&a=&ma=0&bid=1&dt=-1&s=1&so=1 все уже придумано до нас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 16:56 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторвычисляемые выражения, как известно, индексами не могут пользоваться. моя плакает горючими слезами.Формулировка не нравится? Я ж как попроще автору объяснить. При желании можно достигнуть Index Seek и по вычисляемым полям, но лучше не надо... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 23:41 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_tскажите пожалуйста можно это как то автоматически сделать? подскажите пожалуйста, как такое дерево создать... КЛАДР ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 23:47 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_tВ приложении используются запросы, вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Абзац... Автора выгнать, КЛАДР распилить по уровням, выборки делать с помощью BETWEEN. zvezda_tЗаранее огромное спасибо! Не за что . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2010, 23:52 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
NafДа, пока Вы юзаете КЛАДР "как есть" клятая 1С прекрасно конвертирует его в свой регистр сведений с удобной разбивкой полей и их индексацией Naf , но я же не использую 1С. или Вы предлагаете от туда структуру как то перенести? ScareCrow , так всё таки в моём случае можно делать индексацию что-ли? Dim2000 Абзац... Автора выгнать, КЛАДР распилить по уровням, выборки делать с помощью BETWEEN. Dim2000 , не выгоняйте меня пожалуйста, я исправлюсь... Распелить по уровням - значит сделать иерархию, добавив дополнительное поле ParentID как предлагал Senya_L ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 08:16 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_tРаспилить по уровням - значит сделать иерархию, добавив дополнительное поле ParentID как предлагал Senya_L ?Скорее он имеет в виду раскидать элементы КЛАДРа по 5 таблицам в соответствии с количеством уровней оригинального классификатора. ИМХО, лучше так не делать. Конечно, если "дружите" с CTE-запросами. ;) С кладром в виде дерева исходная задача решается элементарно с помощью нехитрого запроса с самосоединением: Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 08:34 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Senya_LСо вторым запросом "выбираем населённый пункты и улицу относящиеся непосредственно к городу" - с этим сложнее, но постановка какая-то неестественная. Обычно еще и уточняют конкретный город. Что, кстати, относится и к первому запросу. Senya_L , да конечно, указывается конкретный город, что задается через переменные $region.$district.$city, а для первого запроса конкретный регион задается через переменную - $region. Спасибо Вам за объяснение!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 08:42 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_t, Вообще-то выбирать одной кучей и районы, и города - не камильфо. Пользователя можно не любить, но уважать его время надо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 09:12 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_t, Вот еще мысли, может что понадобится, не знаю (видел готовое решение): 1. Таблица <Адреса> пример: [id] = ... [тип_адреса] = ... [код_региона] = 50 [Район] = 'Клинский' [город] = 'Высоковск' [Населенный пункт] [Улица] [Дом] [Корпус] [Квартира] [Код города] = '5001100200000' [Код населенного пункта] = '5001100001000' [Код района] = '5001100000000' [Код улицы] = '55000000000124000' 2. Не нужно объединять районы + города, населенные пункты + улицы, а выбирать отдельно их. 3. Индексы строятся на кладровском поле CODE. 4. Запросы к кладру лучше, где это возможно, делать SELECT ... WHERE CODE = {Выражение} - тогда точно по индексу будет выбираться. 5. Главное правильно организовать форму ввода адреса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 10:32 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
авторScareCrow, так всё таки в моём случае можно делать индексацию что-ли? можно. через две вещи 1) indexed view 2) computed column причем во вторую можно наворотить даже CLR функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 11:29 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
ScareCrowможно. через две вещиВо-первых, неизвестно какая СУБД у автора. Можно догадаться, но об этом ни единого намека не было. Так что этих "вещей" может быть даже меньше, чем одна. Во-вторых, а нужно ли? Если есть фичи, то совсем необязательно ими прикрывать недостатки структуры оригинального КЛАДРа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 12:31 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36944602&tid=1542419]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 384ms |

| 0 / 0 |
