SQL Server 2014 Edisi Standar
Saya perlu menemukan jumlah penerbangan ke dan dari kota-kota tertentu selama bulan-bulan tertentu. Misalnya
select count(*)
from flights
where flightTo_AirportCode = 'aaaa'
and flightFrom_Airportcode = 'bbbb'
and flightdate < '2016-04-01'
and flightdate > '2016-02-28' ;
Skema tabel di bawah ini.
Saya mencoba memperkirakan apakah index modelA atau index modelB (di bawah) lebih disukai (butuh berjam-jam untuk membangun indeks, dan ruang disk hanya memungkinkan satu untuk ada pada satu waktu, jadi saya mencoba untuk melihat sebelum saya melompat).
Dari pengalaman saya, baik indeks akan melakukan. Apakah saya benar?
create index [modelA] on flights (flightTo_AirportCode, flightFrom_AirportCode, flightDate)
create index [modelB] on flights (flightDate, flightTo_AirportCode, flightFrom_AirportCode)
(Atau, lebih baik, apakah ada indeks biner atau mekanisme canggih yang bisa saya gunakan untuk mendekati ini?)
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]
sumber