Çok büyük tablolarda (100+ milyon veya 1+ milyar satır) EN SON SON satırlarını sorgulamak için kullandığım bir teknik , sorguyu yalnızca son "N" yüzdesini "okumak" ile sınırlıyor. Bu gerçek dünya uygulamaları, örneğin bunu tarihi olmayan Son Hava Durumu Verileri veya son Haber akışı aramaları veya Son GPS konum veri noktası verileri için yapıyorum.
Satırlarınızın örneğin tablonun en son TOP% 5'inde olduğunu kesin olarak biliyorsanız , bu büyük bir performans artışıdır . Öyle ki, Tablolarda dizinler olsa bile, olasılıkları 100+ milyon veya 1+ milyar sıraya sahip tablolardaki satırların yalnızca% 5'i ile sınırlar. Bu, özellikle Eski Verilerin Yalnızca Bellekteki Mantıksal Değil için Fiziksel Disk okumaları gerektireceği durumdur. okumalar için .
Bu, SELECT TOP | YÜZDE | LIMIT, satırları seçmediğinden, yalnızca aranacak verinin bir kısmını sınırlandırdığından.
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'