Техника, которую я использую для запроса самых последних строк в очень больших таблицах (100+ миллионов или 1+ миллиардов строк) , ограничивает запрос «чтением» только самого последнего «N» процента от RECENT ROWS. Это приложения реального мира, например, я делаю это для неисторических недавних данных о погоде или недавних поисков в новостной ленте или недавних данных о точках данных о местоположении 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'