Форум: "Прочее";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизУскорение запросов Найти похожие ветки
← →
Megabyte © (2006-06-23 19:04) [0]1-й раз столкнулся с тем, что надо оптимизировать запросы, т.к. долго происходит выборка, 10-12 секунд(конечно, все познается в сравнении).
На данный момент у меня происходит 32 последовательных запроса к БД на различные выборки из одних и тех же полей из 2-х таблиц, но запросы не сильно большие. Длительность получается в совокупности.
Есть 2 варианта: а)делать один запрос, а далее на клиенте применять различную фильтрацию.
б)Либо проиндексировать нужные поля. БД создавал не я, и там никаких дополнительных индексов сделано не было.
Ни разу до этого глобально не занимался фильтрацией и использованием индексов(а также их созданием в MSSQL).
1) На ваш взгляд, с чего лучше начать: а или б? Что больше поможет
2) Подкиньте ссылок по созданию и использованию индексов в MSSQL.
Что-то Яндекс ничего хорошего не показал, только различные темы на форумах...
← →
Vlad © (2006-06-23 19:43) [1]Enterprise Manager -> Tools -> Wizards -> Index Tuning Wizard
Можно создавать самому, посмотри какие поля используешь в where, соотв. по ним и строй индексы. Возможно (даже лучше), составные.
← →
Palladin © (2006-06-23 19:44) [2]1) Начать лучше с того что именно выбирается в запросе и как часто это происходит.
2) Индексы не панацея.
← →
Lamer@fools.ua © (2006-06-23 20:11) [3]>1) Начать лучше с того что именно выбирается в запросе и как часто это происходит.
Кроме этого, посмотреть как это выбирается (план выполнения запроса) плюс, возможно, статистику (SET STATISTICS...)
>Подкиньте ссылок по созданию и использованию индексов в MSSQL.
http://www.sql.ru/articles/mssql/03013101Indexes.shtml
← →
Megabyte © (2006-06-25 02:23) [4]
> [1] Vlad © (23.06.06 19:43)
> Enterprise Manager -> Tools -> Wizards -> Index Tuning Wizard
>
> Можно создавать самому, посмотри какие поля используешь
> в where, соотв. по ним и строй индексы. Возможно (даже лучше),
> составные.
Да я это понимаю. Только когда залез в "управление индексами", увидел столько всяких рюшечек, захотел понять предварительно, что каждая значит.
> [2] Palladin © (23.06.06 19:44)
> 1) Начать лучше с того что именно выбирается в запросе и
> как часто это происходит.
Сейчас напишу. Клиент строит типа бухгалтерский отчет. Есть таблица "Документы"(различые денежные обороты). Основыми полями являются: Дата составления, сумма, код_валюты(рубли, баксы, евро, гривны), дебет[приход денег](определяет тип, так сказать, сущности, по которой строится отчет), кредит[расход денег](аналогично, как для дебета), SubContoDt(индекс конкретной сущности по дебету) и SubContokt(индекс конкретной сущности по кредиту), сумма2(т.е. док-ты бывают с расчетом по 2-м разым валютам), код_Валюты2.
Связи постороены хитро. Есть 3 таблицы различых "сущностей": конкретные сотрудники-Employees(71 дебет и кредит), расчетные счета-SettlementAccounts(51), кассы-Subdividings(50).
Там в каждой таблице есть ID и полное описание каждой сущности аля Иванов Петр, Р/С№345, Зеленоград - Касса отдела продаж и т.д. Связь идет по ID с полями SubContoDt, SubContokt.
Отчет состоит в том, чтобы показать денежые обороты за период между 2-мя датами, также должна указываться начальная сумма/долг на начало периода.
Получается, что надо выбирать так, во-первых, в зависимости от выбора пользователя, делать отчет по одному из типов сущности(т.е. заранее неизвестно, какая из 3-х таблиц будет использоваться в запросе), по конкретной сущности.
Далее надо для каждой валюты считать сумму по всем приходам и расходам до указанного периода, потом сумму по приходам и расходам за период. Итого 4 запроса. Умножаем на 4 типа валют = 16. Т.к. у нас есть еще сумма2, то умножаем на 2. 32 запроса. Вот так!
> [3] Lamer@fools.ua © (23.06.06 20:11)
> >1) Начать лучше с того что именно выбирается в запросе
> и как часто это происходит.
>
> Кроме этого, посмотреть как это выбирается (план выполнения
> запроса) плюс, возможно, статистику (SET STATISTICS...)
Вот планирование - это один большой пробел моих знаний в SQL. Надо будет разрюхать. Спасибо за ссылку!
← →
softservice © (2006-06-25 03:44) [5]Не знаю, поможет или нет, но мы использовали такие варианты:
- Сущности хранятся в одно таблице, которая называется субконто. Она хранит только наименование и ID. Остальные специфичные данные хранятся в субтаблица.
- Как следствие, выборка всегда происходит из одной таблицы по первичному для нее индексу (который явлется внешним (foreign key) в таблице операций или документов). Подробную инфу может выдать клиент при запросе пользователя. Но для бух. отчетов этого не требуется.
Конкретно по указанному случаю: делаешь все в одном запросе. left outer join еще никто не отменил :)
← →
Megabyte © (2006-06-26 16:39) [6]
> Не знаю, поможет или нет, но мы использовали такие варианты:
> - Сущности хранятся в одно таблице, которая называется субконто.
>
БД делал не я, и править её я тоже не могу, т.к. БД и другой клиент у них поставляются сторонней фирмой. А меня попросили налабать клиент для построения отчета.
Я не понял, как буду делать всё в одном запросе, если у меня все равно надо получить 32 различных цифры? И зачем здесь " left outer join"?
← →
Megabyte © (2006-06-29 17:44) [7]Пара вопросов про индексы:
1) Чтобы индекс использовался при выборке, надо обязательно свойству indexname прописать имя нужного индекса?
2) В дизайн-тайме в свойстве indexname</B должен быть выпадающий список индексов. У меня ничего не показывает(хотя индексы есть)??? Свойство Connection прописал!
← →
Курдль © (2006-06-29 18:06) [8]
> А меня попросили налабать клиент для построения отчета.
Значицца так. Впариваешь клиентам MSTR (http://www.microstrategy.com/), настраиваешь его за хорошее бабло, срубаешь комиссию с "MicroStrategy, Inc", проблемы со скоростью сваливаешь на MS SQL, после чего впариваешь клиенту оракл. Срубаешь комиссию с "Ораакле" и все в шоколаде. Далее - на фабрику "Российский шоколад" и в соседнюю ветку!
← →
Megabyte © (2006-06-29 18:37) [9]
> Курдль © (29.06.06 18:06) [8]
А почему ты еще не Мастер? %)))
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c