Как вы подходите для оптимизации больших таблиц (+ 1M строк) на SQL Server?

Я импортирую данные о бразильском фондовом рынке в базу данных SQL Server. Прямо сейчас у меня есть таблица с информацией о ценах трех видов активов: акции, опционы и форварды. Я все еще нахожусь в данных за 2006 год, и таблица содержит более полумиллиона записей. У меня есть более 12 лет данных для импорта, поэтому таблица наверняка превысит миллион записей.

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

[Stock] [int] NOT NULL
[Date] [smalldatetime] NOT NULL
[Open] [smallmoney] NOT NULL
[High] [smallmoney] NOT NULL
[Low] [smallmoney] NOT NULL
[Close] [smallmoney] NOT NULL
[Trades] [int] NOT NULL
[Quantity] [bigint] NOT NULL
[Volume] [money] NOT NULL

Теперь второй подход к оптимизации заключался в создании кластерного индекса. На самом деле первичный индекс автоматически кластеризуется, и я сделал его составным индексом с полями Stock и Date. Это уникально, у меня не может быть двух данных по котировкам для одной и той же акции в один и тот же день.

Кластерный индекс гарантирует, что котировки из одной и той же акции остаются вместе, ивероятно, заказано по дате, Это вторая информация правда?

Прямо сейчас с полмиллиона записей это занимает около200мс выбирать700 цитаты из конкретного актива. Я считаю, что это число будет расти по мере роста таблицы.

Теперь о третьем подходе я подумываю разделить таблицу на три таблицы, каждая для определенного рынка (акции, опционы и форварды). Это, вероятно, сократит размер стола на 1/3. Теперь этот подход поможет или он не имеет большого значения? На данный момент размер таблицы составляет 50 МБ, поэтому он может без проблем поместиться в оперативной памяти.

Другим подходом будет использование функции разделения SQL Server. Я не знаю много об этом, но я думаю, что он обычно используется, когда таблицы большие, и вы можете распределить по нескольким дискам, чтобы уменьшить задержку ввода-вывода, я прав? Будет ли полезным в этом случае разделение? Я полагаю, что могу разделить самые новые значения (последние годы) и самые старые значения в разных таблицах. Вероятность поиска самых новых данных выше, и с небольшим разделом это, вероятно, будет быстрее, верно?

Каковы другие хорошие подходы, чтобы сделать это как можно быстрее? Основное использование таблицы выбирается для поиска определенного диапазона записей по конкретному активу, например за последние 3 месяца актива X. Будут другие варианты использования, но это будет наиболее распространенным способом, который может быть выполнен более чем на 3 тыс. пользователи одновременно.

Ответы на вопрос(9)

Ваш ответ на вопрос