Метод, который я использую для запроса НАИБОЛЕЕ ПОСЛЕДНИХ строк в очень больших таблицах (100+ миллионов или 1+ миллиардов строк) ограничивает запрос до«чтение» только самый последний «N» процент последних строк.Это приложения реального мира, например, я делаю это для неисторических недавних данных о погоде или недавних поисков в новостной ленте или недавних данных о точках данных о местоположении GPS.
Это значительное улучшение производительности например, если вы точно знаете, что ваши строки находятся в последних 5% ТОП таблицы.Таким образом, даже если в таблицах есть индексы, это дополнительно ограничивает возможности только 5% строк в таблицах, которые содержат более 100 миллионов или более 1 миллиарда строк.Это особенно актуально, когда для старых данных требуется физический диск чтения, а не только логическая память чтения.
Это гораздо более эффективно, чем 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'