Pertimbangkan MCVE sederhana berikut ini:
SET STATISTICS IO, TIME OFF;
USE tempdb;
IF OBJECT_ID(N'tempdb..#t1', N'U') IS NOT NULL DROP TABLE #t1;
CREATE TABLE #t1
(
r int NOT NULL
);
IF OBJECT_ID(N'tempdb..##t1', N'U') IS NOT NULL DROP TABLE ##t1;
CREATE TABLE ##t1
(
r int NOT NULL
);
IF OBJECT_ID(N'dbo.s1', N'U') IS NOT NULL DROP TABLE dbo.s1;
CREATE TABLE dbo.s1
(
r int NOT NULL
PRIMARY KEY CLUSTERED
);
INSERT INTO dbo.s1 (r)
SELECT TOP(10000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM sys.syscolumns sc1
CROSS JOIN sys.syscolumns sc2;
GO
Ketika saya menjalankan sisipan berikut, memasukkan ke #t1
menunjukkan tidak ada statistik I / O untuk tabel temp. Namun, memasukkan ke ##t1
tidak menunjukkan statistik I / O untuk tabel temp.
SET STATISTICS IO, TIME ON;
GO
INSERT INTO #t1 (r)
SELECT r
FROM dbo.s1;
Output statistik:
SQL Server mengurai dan mengkompilasi waktu: Waktu CPU = 0 ms, waktu yang berlalu = 1 ms. Tabel 's1'. Pindai hitungan 1, bacaan logis 19, bacaan fisik 0, bacaan baca depan 0, bacaan logis lob 0, bacaan fisik lob 0, bacaan baca lob depan 0. Waktu Eksekusi SQL Server: Waktu CPU = 16 ms, waktu yang berlalu = 9 ms. (10000 baris terpengaruh)
INSERT INTO ##t1 (r)
SELECT r
FROM dbo.s1;
SQL Server mengurai dan mengkompilasi waktu: Waktu CPU = 0 ms, waktu yang berlalu = 1 ms. Tabel '## t1'. Pindai hitungan 0, bacaan logis 10016, bacaan fisik 0, bacaan baca-depan 0, bacaan logis lob 0, bacaan fisik lob 0, bacaan baca lob depan 0. Tabel 's1'. Pindai hitungan 1, bacaan logis 19, bacaan fisik 0, bacaan baca depan 0, bacaan logis lob 0, bacaan fisik lob 0, bacaan baca lob depan 0. Waktu Eksekusi SQL Server: Waktu CPU = 47 ms, waktu yang berlalu = 45 ms. (10000 baris terpengaruh)
Mengapa ada begitu banyak bacaan di tabel temp ## ketika saya hanya memasukkan ke dalamnya?
sumber