Я мало что знаю о оптимизации БД/управлении памятью.Лучше ли хранить результаты запроса в памяти или запускать один и тот же запрос несколько раз?
У меня есть запрос, который выглядит следующим образом:
SELECT Value
FROM ValueTable
WHERE SomeConstraint > 4
Мне нужно, чтобы получить результаты этого запроса, а также результаты от этого запроса с одним дополнительным ИНЕКЕМ. Какой из этих двух подходов лучше?
1) Выберите результаты этого запроса в переменной. Тогда есть два дополнительных запросов
SELECT COUNT(DISTINCT(VALUES))
FROM @SavedQuery
SELECT COUNT(DISTINCT(VALUES))
FROM @SavedQuery
WHERE otherConstraintColumn < 30
2)
SELECT COUNT(DISTINCT(Value))
FROM ValueTable
WHERE SomeConstraint > 4
SELECT COUNT(DISTINCT(Value))
FROM ValueTable
WHERE SomeConstraint > 4
AND otherConstraintColumn < 30
Это потенциально может быть написано в LINQ, так что может быть, как мы храним результаты запроса.
Как вы будете использовать кешированный querey для выполнения счета, счет в базе данных довольно эффективен, чем получение результатов и подсчет в памяти. Я бы выбрал вариант 2 точно. –
Этот вопрос почти невозможно ответить, поскольку он будет сильно зависеть от ваших конкретных потребностей и настройки. Сколько строк вы возвращаетесь? Насколько медленна латентность между БД и веб-сервером? Сколько памяти/скорости у вас есть на веб-сервере? Каковы конкретные требования к отзывчивости для веб-страницы? Сколько других запросов выполняется одновременно? Сколько пользователей одновременно попадает на эту страницу? Я мог бы спросить гораздо больше, но я думаю, вы поняли. – JDB
Процитировать Brent Ozar: «Самый быстрый запрос - тот, который вы никогда не делаете». Хотя я согласен с киборгом, все зависит от вашего сценария. – DaveShaw