Estarei preenchendo uma tabela de milhas por galão (MPG). Está vindo de uma fonte de hodômetro.
Atualmente está configurado da seguinte forma:
id (primary_key)
, truck_num
, start_date
, end_date
, start_miles
, end_miles
, start_fuel
, end_fuel
, miles
, gals
, mpg
Parece haver alguma redundância. O miles
é (end_miles - start_miles)
, idem para gals
.
Devemos ter essas colunas pré-calculadas e armazenadas no banco de dados miles
? gals
Isso definitivamente tornaria a consulta mais fácil, mas à custa de espaço. Mesma pergunta para ter o mpg
calculado. Uma coluna computada tornaria as coisas mais lentas, não?
Quais índices funcionariam melhor? São cerca de 3.000 caminhões (registros) inseridos em um lote toda semana.
Estou usando o SQL Server 2008 R2.
Editar: uma consulta de amostra que eu usaria
-- find average mpg for since ytd
select m.truck_num, avg(mpg)
from mpg m
join truck t on t.truck_num = m.truck_num
where start_date >= @begin_of_year and end_date <= @today
group by truck_num
CHECK
restrições.Aqui está uma definição de pseudo-esquema:
Quanto à indexação da tabela, eis o que penso:
start_date ASC
. Isso satisfará suaWHERE
cláusula. Você está sempre inserindo dados aumentandostart_date
, o que significa que suas gravações sempre serão sequenciais nesse esquema de agrupamento. Você também está sempre consultandostart_date
para satisfazer seu maior padrão de consulta. (3.000 inserções por semana não é nada. Como você tem um volume tão baixo de inserções, pode até agrupar emstart_date ASC, end_date ASC
.)truck_num
eINCLUDE mpg
. Isso deve satisfazer suas cláusulasSELECT
,JOIN
e .GROUP BY
Se você quiserORDER BY mpg
, façampg
parte da chave de índice depoistruck_num
, em vez de apenasINCLUDE
apertá-la.Quando terminar, teste sua configuração da seguinte maneira:
Eu gosto da resposta de Nick, então não vou repetir suas informações sobre colunas computadas e restrições.
Eu abordaria a indexação de maneira diferente:
(startdate, enddate, trucknum)
deve ser exclusivo (o mesmo caminhão não pode fazer uma jornada idêntica). Então faça isso agrupado e único: um PK clássico usando a chave natural