Berdasarkan pertanyaan-pertanyaan ini dan jawaban yang diberikan:
SQL 2008 Server - kehilangan kinerja mungkin terhubung dengan tabel yang sangat besar
Saya memiliki tabel dalam database SupervisionP yang didefinisikan seperti ini:
CREATE TABLE [dbo].[PenData](
[IDUkazatel] [smallint] NOT NULL,
[Cas] [datetime2](0) NOT NULL,
[Hodnota] [real] NULL,
[HodnotaMax] [real] NULL,
[HodnotaMin] [real] NULL,
CONSTRAINT [PK_Data] PRIMARY KEY CLUSTERED
(
[IDUkazatel] ASC,
[Cas] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[PenData] WITH NOCHECK ADD CONSTRAINT [FK_Data_Ukazatel] FOREIGN KEY([IDUkazatel])
REFERENCES [dbo].[Ukazatel] ([IDUkazatel])
ALTER TABLE [dbo].[PenData] CHECK CONSTRAINT [FK_Data_Ukazatel]
Ini berisi cca 211 juta baris.
Saya menjalankan pernyataan berikut:
DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;
SET @t1 = GETDATE();
SELECT min(cas) from PenData p WHERE IDUkazatel=24
SELECT min(cas) from PenData p WHERE IDUkazatel=25
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;
SET @t1 = GETDATE();
SELECT min(cas) from PenData p WHERE IDUkazatel=24 OR IDUkazatel=25
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;
Hasilnya ditunjukkan di sini:
SELECT ketiga juga memuat lebih banyak data ke dalam cache memori SQL Server.
Mengapa SELECT ketiga jauh lebih lambat (8,5 detik) daripada dua SELECT pertama (16 ms)? Bagaimana saya dapat meningkatkan kinerja pemilihan ketiga dengan OR? Saya ingin menjalankan perintah SQL berikut, tetapi bagi saya tampaknya membuat kursor dan menjalankan kueri terpisah jauh lebih cepat daripada pilihan tunggal dalam kasus ini.
SELECT MIN(cas) from PenData p WHERE IDUkazatel IN (SELECT IDUkazatel FROM ...)
EDIT
Seperti yang disarankan David, saya melayang di atas panah gemuk:
sumber
SELECT TOP (1) min_cas=MIN(CAS) ... ORDER BY min_cas;
(tapi saya rasa rencananya akan sama dengan milik Anda.)