Метод, який я використовую для запиту найпопулярніших рядків у дуже великих таблицях (100+ мільйонів або 1+ мільярдів рядків) , обмежує запит на "читання" лише останнього "N" відсотка ПОСЛІДНИХ РЯДІВ. Це додатки в реальному світі, наприклад, я роблю це для неісторичних останніх погодних даних або останніх пошуків каналів новин або останніх даних точок даних про місцезнаходження GPS.
Це величезне поліпшення продуктивності, якщо ви точно знаєте, що ваші рядки є, наприклад, в останніх 5% таблиці. Такий, що навіть якщо на Таблицях є індекси, це додатково обмежує можливості лише 5% рядків у таблицях, що містять 100+ мільйонів або 1+ мільярдів рядків. Особливо це стосується випадків, коли для старих даних будуть потрібні зчитування фізичного диска, а не лише зчитування з Logical In Memory .
Це набагато ефективніше, ніж SELECT TOP | ПОСЛУГИ | LIMIT, оскільки він не вибирає рядки, а лише обмежує частину даних, які потрібно шукати.
DECLARE @RowIdTableA BIGINT
DECLARE @RowIdTableB BIGINT
DECLARE @TopPercent FLOAT
-- Given that there is an Sequential Identity Column
-- Limit query to only rows in the most recent TOP 5% of rows
SET @TopPercent = .05
SELECT @RowIdTableA = (MAX(TableAId) - (MAX(TableAId) * @TopPercent)) FROM TableA
SELECT @RowIdTableB = (MAX(TableBId) - (MAX(TableBId) * @TopPercent)) FROM TableB
SELECT *
FROM TableA a
INNER JOIN TableB b ON a.KeyId = b.KeyId
WHERE a.Id > @RowIdTableA AND b.Id > @RowIdTableB AND
a.SomeOtherCriteria = 'Whatever'