Хранилище данных с минимальными изменениями - PullRequest
0 голосов
/ 23 февраля 2011

Хорошо, у меня есть таблица, которая имеет данные за 10 лет, и производительность поражает. Я планирую переместить более старые данные в отдельную историческую таблицу. проблема заключается в том, что мне нужно выбрать из первой таблицы, если она там, и 2-й таблицы, если нет. Я не хочу делать соединение, потому что тогда оно всегда будет выполнять поиск по 2-й таблице. HELP

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Если вам по-прежнему нужно запрашивать данные, я бы не переместил их в другую таблицу.Насколько большой стол сейчас?Каковы показатели?Рассматривали ли вы разделение стола?

Если вам необходимо перейти к другой таблице, вы можете запросить хранимые процедуры с помощью оператора if.Сначала запросите основную таблицу, а затем, если rowcount = 0, запросите другую таблицу.Это будет медленнее для записей не в основной таблице, но должно оставаться быстрым, если они там находятся.Тем не менее, он не будет знать, когда вам нужны записи из обоих.

Пример кода для этого:

CREATE PROC myproc (@test INT)
AS
SELECT field1, field2 from table1field1, field2 from table1
 IF @@rowcount = 0
 BEGIN
 SELECT field1, field2 FROM table2 field1, field2 from table1
 END

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

Иногда покупка лучшего сервера также может помочь.

1 голос
/ 23 февраля 2011

Вместо того, чтобы использовать отдельную хронологическую таблицу, вам может потребоваться разбить таблицу на части с помощью некоторой функции даты (возможно, года?), Чтобы вместо этого повысить производительность.

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