Правда всем наскучили тривиальные задачки? У меня елементарный запрос... но ->
Итак есть 18! серверов.
На каждом есть одинаковая таблица user_interaction
object_id int,
owner_id int,
count int
На поля object_id и owner_id есть индексы.
Сочетание object_id и owner_id уникально, составной индекс не добавлен, так как все запросы обычно только по одному из полей...
В каждой из таблиц есть около 20 млн. записей
То, что мне надо это
SELECT TOP 200 * FROM user_interaction WHERE owner_id = @p1 ORDER BY count, object_id DESC
Варианты решения:
1) Linked servers + view
я пробовал тормозит жутко.
2) Запустить запрос на всех серверах, затем отсортировать заного в аппликации.
работает, но хотелось бы оптимизировать
Т.е. запускаю запрос на первом сервере, беру минимальное значение count и на втором запускаю уже
SELECT TOP 200 * FROM user_interaction WHERE owner_id = @p1 AND count > @min_count ORDER BY count, object_id DESC
и так дальше на все сервера.
ORDER BY count,
object_id добавлен чтобы решить проблему когда на одном из серверов больше 200 одинаковых значений count
Очень нужен опыт, если кто сталкивался с unlimited scalability архитектурой.
P.S. Скорость выборки из одной таблицы приемлема от 3 до 6 секунд.
но 6*18 = уже дофига...