У мене є таблиця з кількома мільйонами рядків, з якої мені потрібно час від часу запускати деякі запити. Перший запит, як правило, досить повільний (близько 10 с), а наступні запити, як правило, набагато швидше (близько 1 с). Через кілька годин знову починається повільний / швидкий цикл.
Я перевірив у своєму плані виконання, що весь необхідний індекс присутній і належним чином використаний, і я припускаю, що різниця в продуктивності пов'язана з тим, що індекс насправді є в пам'яті для наступних запитів (я правий, чи є інші можливі причини?)
Я також виконую безліч інших запитів, використовуючи також індекси, але ці запити менш трудомісткі, а їх ефективність є менш критичною, тому я занепокоєний, що ці індекси фактично виштовхують мій критичний індекс із кешу пам'яті.
Крім очевидного виправлення «додати більше оперативної пам’яті», я замислювався над тим, щоб сценарії фіктивних запитів виконуватись щогодини, щоб змусити індекс повернутись у пам’ять.
Чи є більш елегантний спосіб це зробити? Як спосіб натякнути SQLServer, що якщо у нього достатньо пам'яті, щоб зберегти один єдиний індекс, він повинен бути таким?
Я знаю, що, як правило, найкраще - це не зіпсувати SQLServer стосовно таких речей, але незвичний характер мого запиту (працює дуже рідко, але критичний за часом) змушує мене вважати, що це має сенс (якщо можливо) .
Мені також цікаво дізнатися, чи є спосіб дізнатися, які індекси зберігаються в пам'яті в даний момент часу?