SQL Server 2014 Standart Sürüm
Belirli aylar için belirli şehirlere gidiş ve dönüş uçuş sayısını bulmam gerekiyor. Örneğin
select count(*)
from flights
where flightTo_AirportCode = 'aaaa'
and flightFrom_Airportcode = 'bbbb'
and flightdate < '2016-04-01'
and flightdate > '2016-02-28' ;
Tablo şeması aşağıdadır.
İndeks modelA veya dizin modelB (aşağıda) tercih edilebilir olup olmadığını tahmin etmeye çalışıyorum (dizin oluşturmak için birkaç saat sürer ve disk alanı bir kerede sadece biri var izin verir, bu yüzden ben sıçrama önce bakmaya çalışıyorum).
Deneyimlerime göre, her iki dizin de yapacak. Haklı mıyım?
create index [modelA] on flights (flightTo_AirportCode, flightFrom_AirportCode, flightDate)
create index [modelB] on flights (flightDate, flightTo_AirportCode, flightFrom_AirportCode)
(Veya daha iyisi, buna yaklaşmak için kullanabileceğim bir ikili dizin veya gelişmiş bir mekanizma var mı?)
CREATE TABLE [dbo].[flights](
[flightId] [uniqueidentifier] NOT NULL,
[accountId] [uniqueidentifier] NULL,
[flightDate] [datetime] NULL,
[flightTo_AirportCode] [nvarchar](30) NULL,
[flightFrom_AirportCode] [nvarchar](30) NULL,
-- ... 45 more fields
CONSTRAINT [PK_flight] PRIMARY KEY CLUSTERED
(
[flightId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 70) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]