Я импортирую данные бразильского фондового рынка в базу данных 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
Теперь второй подход для оптимизации заключался в создании кластерного индекса. Фактически первичный индекс автоматически сжимается, и я сделал его составным индексом с полями "Сток" и "Дата". Это уникально, я не могу иметь две данные котировки для одного и того же запаса в тот же день.
Сложенный индекс гарантирует, что котировки из одного и того же запаса остаются вместе, а , вероятно, упорядочены по дате. Является ли эта вторая информация верной?
Прямо сейчас, когда полмиллиона записей занимают 200 мс, чтобы выбрать 700 цитаты из определенного актива. Я считаю, что это число будет расти по мере роста таблицы.
Теперь для третьего подхода я думаю, что, возможно, разбивая таблицу на три таблицы, каждая для определенного рынка (акции, опционы и форварды). Вероятно, это уменьшит размер таблицы на 1/3. Теперь, поможет ли этот подход или это не имеет большого значения? Прямо сейчас таблица имеет размер 50 МБ, поэтому она может полностью помещаться в ОЗУ без особых проблем.
Другим подходом будет использование функции разделения SQL Server. Я не знаю много об этом, но я думаю, что это обычно используется, когда таблицы большие, и вы можете охватывать несколько дисков, чтобы уменьшить латентность ввода-вывода, верно? Разделение будет полезным в этом случае? Я считаю, что могу разбить новейшие значения (последние годы) и самые старые значения в разных таблицах. Вероятность поиска новейших данных выше, а с небольшим разделом она, вероятно, будет быстрее, правильно?
Какими будут другие хорошие подходы, чтобы сделать это максимально возможным? В основном выбор использования таблицы будет заключаться в поиске определенного диапазона записей из определенного актива, таких как последние 3 месяца актива X. Будут и другие способы использования, но это будет наиболее распространенным, возможно, выполнено более чем на 3 тыс. пользователей одновременно.