мы сталкиваемся со следующей проблемой и пытаемся найти наилучшее из возможных решений.
Мы используем SQL Server 2008. У нас есть таблица, которая содержит более 600 миллионов записей и имеет около 25 столбцов. Один из столбцов является идентификатором и индексируется. Нам нужно получить подмножество записей из этой таблицы. В основном это 2 случая:
а) подмножество содержит от 1000 до 200 миллионов строк; идентификаторы строк, которые нужно получить, хранятся в индексированной таблице в SQL Server;
б) подмножество содержит менее 1 миллиона строк; идентификаторы строк, которые нужно получить, хранятся в памяти сервера приложения (веб-приложение .NET).
Наша задача - как можно быстрее получить это подмножество. Нам нужно, чтобы это произошло через несколько секунд.
Наши решения на данный момент:
а) мы делаем соединение между двумя таблицами. Это работает, но это не достаточно быстро. Запрос выглядит примерно так: SELECT * FROM Big_Table JOIN IndexTable ON Big_Table.ID = IndexTable.ID
.
б) у нас на самом деле нет решения. Мы попытались выполнить запрос WHERE IN, но это просто занимает вечно, если подмножество приближается к миллиону строк (SELECT * FROM Big_Table WHERE ID IN (ID1, ID2, ID3...)
). Решением может быть сохранение индексов во временной таблице, но тогда это возвращается к случаю a.
Мы стараемся максимально оптимизировать SQL Server, особенно с помощью хороших индексов и секционирования. Сегодня я больше спрашиваю о том, что, по вашему мнению, наилучший подход заключается в извлечении подмножества в обоих случаях (a и b).
Любая идея или предложение приветствуется.
Спасибо