У меня есть таблица с потенциально до нескольких сотен тысяч строк. Каждая строка представляет заявку на финансирование в рамках блока переписи данного заявителя. Если у меня есть всего пару сотен строк, я могу присвоить ранг для каждого приложения в своем блоке переписи с помощью этого:Что такое эффективный способ ранжирования записей в группе в Access?
SELECT art1.CFA_Plus, art1.Census_Block_ID,
(SELECT count(*) + 1
FROM AppReferenceTable art2
WHERE art2.State_Cost_Per_Unit < art1.State_Cost_Per_Unit AND
art2.Census_Block_ID = art1.Census_Block_ID) AS Rank_In_Block
FROM AppReferenceTable AS art1;
Это прекрасно работает для ранжирования каждого приложения на единицу затрат в рамках этого блока переписи. Но он задыхается на моем тестовом столе, который имеет около 60 000 строк. Есть ли способ лучше? Или, что я делаю неправильно?
Спасибо!
При расчете живого контента слишком много, вы можете сохранить результаты. Добавьте поле в AppReferenceTable и создайте запрос UPDATE, который заполняет его рангом. Запланируйте это, чтобы работать каждую ночь. Если немедленное получение последних данных не является нарушителем транзакций, он выполнит эту работу. – SunKnight0
Ваш подзапрос не оптимизирован для MS ACCESS, каждая запись должна быть пересчитана, и это влияет на ее производительность. Обращаясь к такому большому набору данных, вы уже должны были подумать о переходе к выделенной СУБД. MySQL является бесплатным, и вы все еще можете использовать интерфейс MS Access и использовать все эти причудливые операции SQL. –