Использование: SQL Server 2008, Entity FrameworkSQL SUM Несколько столбцов в таблице - Производительность
Я суммированием столбцов в таблице по диапазону даты/времени. Стол прямолинейно:
DataId bigint IDENTITY(1,1) NOT NULL PRIMARY KEY,
DateCollected datetime NOT NULL,
Length int NULL,
Width int NULL,
-- etc... (several more measurement variables)
После того, как у меня есть диапазон даты/времени, я использую LINQ-to-EF, чтобы получить запрос назад
var query = _context.Data.Where(d =>
(d.DateCollected > df &&
d.DateCollected < dt))
Я тогда построить свою структуру данных с использованием сумма элементов данных, которые меня интересуют
DataRowSum row = new DataRowSum
{
Length_Sum = query.Sum(d => d.Length.HasValue ? (long)d.Length.Value : 0),
Width_Sum = query.Sum(d => d.Width.HasValue ? (long)d.Width.Value : 0),
// etc... (sum up the rest of the measurement variables)
}
В то время как это работает, это приводит к большому количеству поездок по DB и довольно медленным. Есть лучший способ сделать это? Если это означает делать это в хранимой процедуре, все в порядке со мной. Мне просто нужно улучшить производительность, так как мы добавим больше переменных измерений, и эта проблема будет только ухудшаться.
Спасибо @Jasmine. Я предполагал, что путь SP будет лучшим способом. Как здесь группируется в SQL? –
Совокупные функции, такие как min() и sum(), работают против групп строк. Группой может быть «все строки», или вы можете разбить ее на более мелкие группы. Например, скажем, у вас в таблице есть таблица с заказами клиентов - вы можете узнать количество заказов для каждого клиента с помощью select cust_id, count (1) из группы заказов cust_id - рассказать вам количество строк, сгруппированных по клиенту , Вы можете выполнить групповой/агрегирующий запрос с LINQ, но он не такой надежный, как реализация T-SQL. – Jasmine