|
|
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#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 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
авторЗдравствуйте! Подскажите пожалуйста как правильно написать индексы для таблиц КЛАДР расположенных на Microsoft SQL Server 2005? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 12:33 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторЗдравствуйте! Подскажите пожалуйста как правильно написать индексы для таблиц КЛАДР расположенных на Microsoft SQL Server 2005?Остается "во-вторых" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 12:40 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
ScareCrow , Большое спасибо за ответ!!! MAYAKOV_SV , благодарю Вас за информацию! Очень полезно!!! Senya_L Вообще-то выбирать одной кучей и районы, и города - не камильфо. Пользователя можно не любить, но уважать его время надо :) Senya_L , дело в том что выборка у меня происходит через списки, вот так и бывают ситуации когда, города и районы на одном уровне, например: регион - АЛТАЙ, следующий уровень:районы + г. Горно-Алтайск соответственно и выборка у меня смешанная. вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 13:42 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_tдело в том что выборка у меня происходит через списки, вот так ...Зачем взяли в руку эту бяку? Выбросите ее нафиг! Зачем равняться на эту неудобную хрень? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 13:49 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Senya_LЗачем взяли в руку эту бяку? Выбросите ее нафиг! Зачем равняться на эту неудобную хрень?[/quot] да... чувствую меня ждет глобальное изменение и вариант2 для ввода данных и новая организация таблиц))) спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 14:14 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_t соответственно и выборка у меня смешанная. вот. Вот пример работы формы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Все делается последовательно. При открытии формы с редактированием адреса к кладру обращения не происходит. Т.к. в таблице адресов продублировано наименования реквизитов из кладра. SQL запрос к кладру выполняется только тогда, когда пользователь нажимают кнопочку выбора значений. Самое сложное - сделать проверку правильности ввода. Да и то сложность условная - нужно немного смекалки :) Получаем: - проблемы при открытии формы нет, т.к. к кладру прога в это время не обращается. - проще запросы, т.к. нет всяких UNION и сложных WHERE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 14:25 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
zvezda_t да... чувствую меня ждет глобальное изменение и вариант2 для ввода данных и новая организация таблиц))) спасибо! Мой совет: Если у Вас есть время, лучше сделайте тестовый проект, и попробуйте разные варианты по вводу адреса. Тогда вам будет понятно как лучше-то сделать. И потом только принимайте решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 14:30 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVСамое сложное - сделать проверку правильности ввода. Да и то сложность условная - нужно немного смекалки :)Тов. Кодд этой "смекалке" давал более научное название - денормализация. Я вот ее тоже практикую, но более в скромных масштабах. В таблице Address держу адреса строку (отформатированную по правилам БД, а не клиента), чтобы выборка была дешевле. И к тому же при обновлении КЛАДРа эти строки пересчитываются, т.е. более-менее продумано. А вот какие обоснования есть у вас настолько усложнять одну из подзадач системы - непонятно. MAYAKOV_SV При открытии формы с редактированием адреса к кладру обращения не происходит. И что, это большое преимущество? Если оператор влез в форму редактирования, то обращаться к БД все равно придется. Рано или поздно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 15:18 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Senya_L, то что я писал - это не мое изобретение. Я в рабочем проекте видел это все. Senya_LИ что, это большое преимущество? Если оператор влез в форму редактирования, то обращаться к БД все равно придется. Рано или поздно. Ну как я понял, все началось вот с этого: zvezda_t тогда вновь открывается форма ввода адреса с использованием кладра, но эта форма грузиться очень долго , потому что адреса извлекаются по ранее сохранённому коду Из этого я понял, что у нее все время при открытии формы каждый раз грузятся данные из КЛАДР. Преимущество такое, что если оператору вдруг надо будет поменять всего лишь номер квартиры, то зачем лишнии загрузки, тормозящие работу программы? Надо, к примеру, сменить улицу: - оператор жмет кнопку - выполняется запрос к КЛАДР с учетом предыдущих выбранных реквизитов - появляется форма со списком улиц, к примеру, данного города - оператор выбирает улицу, нажимает кнопку OK - в таблице <АДРЕСА> прописываются значения в поля: <КОД УЛИЦЫ>, <НАИМЕНОВАНИЕ УЛИЦЫ> И все по такому принципу. Нужен отчет выдать - имена атрибутов (район, улица,...) берутся из <АДРЕСА>, а не из кладр. Нужно поменять адрес - берем коды из таблицы <АДРЕСА> и выдаем форму со списком из кладр. Вот я и решил, что все проблемы в организации работы формы. Ну, это один из способов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 16:17 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVИз этого я понял, что у нее все время при открытии формы каждый раз грузятся данные из КЛАДР.Это проблема кривого клиентского приложения. Это не повод всю схему данных ставит с ног на голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2010, 16:26 |
|
||
|
КЛАДР, улучшение скорости запросов
|
|||
|---|---|---|---|
|
#18+
Dim2000zvezda_tВ приложении используются запросы, вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Абзац... Автора выгнать, КЛАДР распилить по уровням, выборки делать с помощью BETWEEN. zvezda_tЗаранее огромное спасибо! Не за что . Что значит распилить по уровням? И как в таком случае делать выборки с помощью between?! Это же диапазон записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 21:05 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1542419]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
196ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 503ms |

| 0 / 0 |
