SQL Server 2014 Standard Edition
Ich muss die Anzahl der Flüge finden, die für bestimmte Monate von und zu bestimmten Städten fliegen. Z.B
select count(*)
from flights
where flightTo_AirportCode = 'aaaa'
and flightFrom_Airportcode = 'bbbb'
and flightdate < '2016-04-01'
and flightdate > '2016-02-28' ;
Das Tabellenschema ist unten.
Ich versuche zu schätzen, ob Indexmodell A oder Indexmodell B (unten) vorzuziehen ist (das Erstellen des Index dauert viele Stunden, und auf dem Speicherplatz kann jeweils nur einer vorhanden sein, daher versuche ich zu suchen, bevor ich springe).
Nach meiner Erfahrung reicht jeder Index aus. Habe ich recht?
create index [modelA] on flights (flightTo_AirportCode, flightFrom_AirportCode, flightDate)
create index [modelB] on flights (flightDate, flightTo_AirportCode, flightFrom_AirportCode)
(Oder, besser, gibt es einen Binärindex oder einen erweiterten Mechanismus, mit dem ich mich dem nähern kann?)
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]
quelle