| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Тригер или Представление |
| Автор: SATYR 1.6.2005, 14:47 |
| Вопрос вот в чем Есть таблица с "сырыми" данными. Для улучшения работы с ними что лучше предпочесть , с точки зрения снижения затрат ресурсов сервера и повышения быстродействия(таблица большая): 1) View над этой таблицей 2) insert triger приводяший данные к желаемому виду при их занесение в таблицу и ежели можно то почему? |
| Автор: boevik 1.6.2005, 14:53 |
| SATYR, так все зависит от соотношения количества Insert-ов и select-ов. Если у тебя один insert и 100 select-ов, то думаю и сам можешь догадаться что предпочтительнее. |
| Автор: AntonSaburov 2.6.2005, 11:17 |
| Может тогда лучше вставлять через stored procedure ? Она уже будет скомпилирована, работать будет быстрее. Да и проблем меньше - всегда можно логику сменить. Триггер имеет больше ограничений все-таки. |
| Автор: Akina 2.6.2005, 11:30 |
| А может один раз сырые данные привести к нормальному виду, а? |
| Автор: SATYR 2.6.2005, 14:57 | ||
они (данные) дополняются и колличество Insert-ов изрядно, но Select тоже возвращает большое колличество строк.
я склоняюсь к этому варианту, но вопрос в том значительно ли тригер будет влиять на скорость внесения данных. И есчо вопрос для собственного ликбеза.) Подскажите когда выполняется View: при обращение к нему во From, либо сервер создает его заблагавременно и хранит в свое пространстве как некую виртуальную таблицу? |
| Автор: AntonSaburov 2.6.2005, 20:27 | ||
Если обращение идет часто, то может долгое время в кэше лежать. Я еще раз предлагаю делать через процедуру - тогда сама таблица будет лочится на меньшее время. Еще можно оттуда автополя убрать. Возможно было бы здорово вставлять в несколько таблиц, а просмотр сливал бы их в одну. Хотя это чисто теоретические измышления. |
| Автор: SATYR 6.6.2005, 14:28 | ||
Использовать хранимку думаю не получится по одной простой причине т.к. занесением данных в БД занимается определенная софтина которую писал не я. Соответственно она и формирует Insert. Я думаю использовать тригер INSTEAD OF INSERT только опять одна зупынка выходит если использовать конструкцию Insert то вроде все как надо, но если хочеш использовать INSERT... SELECT... то добавляется только одна строка из набора. |
| Автор: Vit 7.6.2005, 15:34 |
| Триггер - один из самых медленных объектов. Использовать только тогда когда без него не обойтись. View - довольно приятная штука, особенно в 2000 поддерживает создание индексов, но к повышению производительности он не приведёт однозначно. По сути он ничем не отличается от запроса на самой таблице... его можно использовать для чего угодно, но только не с целью повышения производительности. Я бы рекомендовал - 1) нормализовать таблицу, 2) создать нужные индексы... 3) Если надо делать периодические не очень частные отчёты - то делать TDS или репликацию таблицы в другую базу данных и делать отчёты на копии, а не на живой таблице 4) Разобраться с уровнем изоляции запросов на эту таблицу и накладываемыми блокировками при каждом запросе. По умолчанию SQL Server больше заботится об аккуратности, чем о быстродействии, но во многих случаях это может быть абсолютно излишне |