Как я могу использовать представления и индексирование для улучшения производительности - PullRequest
1 голос
/ 14 сентября 2011

Я работаю над некоторыми таблицами, которые имеют временные строки и присутствуют в разных базах данных. Идея состоит в том, чтобы написать хранимый процесс для получения и, наконец, обработки данных, что, в свою очередь, будет использовать множество соединений, что приведет к огромному количеству данных. А потом я выполняю некую агрегированную логику, чтобы получить необходимые данные.

Такой хранимый может потребоваться использовать циклы и т. Д. И будет очень медленным.

Могу ли я использовать Views для создания таблицы, которая уже будет короткой перечисленной таблицей, состоящей только из необходимых строк (полученных из объединений и агрегатов). Я упускаю некоторые основы здесь: 1. Виды получают данные только во время выполнения? Если они это сделают, как я могу использовать их для повышения производительности. 2. Могу ли я использовать индексирование для увеличения производительности для такого представления? 3. Курсоры быстрее, чем циклы? Я знаю, что мог бы использовать какой-то запрос, чтобы избежать циклов - но предположим, что если бы мне пришлось использовать цикл, курсоры были бы лучшим выбором?

Спасибо ...

1 Ответ

0 голосов
/ 14 сентября 2011

Индексированные представления могут повысить производительность, но читайте в них Книги онлайн, поскольку существует множество ограничений на то, какие виды могут быть проиндексированы.Они действительно могут помочь с агрегацией, хотя вы можете соответствовать другим условиям, которым должно соответствовать индексированное представление. Представления, которые вызывают другие представления, могут значительно снизить производительность, не используйте их.

Чтобы повысить производительность в агрегации, если вы не можете использовать индексированные представления для решения своей проблемы, одна из стратегий состоит в том, чтобы сохранять агрегированные значения в таблице, которая обновляется с помощью триггеров, при каждом изменении базовых данных.Таким образом, вычисление выполняется только один раз для каждого изменения данных, а не повторяется много раз в отдельных запросах.Триггер должен быть тщательно написан и обрабатывать несколько записей вставки / обновления / удаления.Если агрегация может быть немного не синхронизирована с реальным временем, вы можете сделать это в задании вместо триггера.

Курсоры и циклы редко нужны в коде приложения.Их реальное использование обычно для задач администратора базы данных.Чтобы помочь вам понять, какие методы лучше использовать, чем циклы, прочитайте это: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...