Aşağıdaki basit MCVE'yi düşünün:
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
Aşağıdaki ekleri çalıştırdığımda, eklediğinizde #t1
geçici tablo için istatistik G / Ç görüntülenmiyor. Bununla birlikte, içine sokulması ##t1
yapar İstatistikleri göster I / sıcaklık tablo Ö.
SET STATISTICS IO, TIME ON;
GO
INSERT INTO #t1 (r)
SELECT r
FROM dbo.s1;
İstatistik çıktısı:
SQL Server ayrıştırma ve derleme zamanı: CPU süresi = 0 ms, geçen süre = 1 ms. Tablo 's1'. Tarama sayısı 1, mantıksal okumalar 19, fiziksel okumalar 0, okuma öncesi okumalar 0, lob mantıksal okumalar 0, lob fiziksel okumalar 0, lob okuma öncesi okumalar 0. SQL Server Yürütme Süreleri: CPU süresi = 16 ms, geçen süre = 9 ms. (10000 satır etkilendi)
INSERT INTO ##t1 (r)
SELECT r
FROM dbo.s1;
SQL Server ayrıştırma ve derleme zamanı: CPU süresi = 0 ms, geçen süre = 1 ms. '## t1' tablosu. Tarama sayısı 0, mantıksal okuma 10016, fiziksel okuma 0, okuma öncesi okuma 0, lob mantıksal okuma 0, lob fiziksel okuma 0, lob okuma öncesinde okuma 0. Tablo 's1'. Tarama sayısı 1, mantıksal okumalar 19, fiziksel okumalar 0, okuma öncesi okumalar 0, lob mantıksal okumalar 0, lob fiziksel okumalar 0, lob okuma öncesi okumalar 0. SQL Server Yürütme Süreleri: CPU süresi = 47 ms, geçen süre = 45 ms. (10000 satır etkilendi)
## temp tablosunda yalnızca içine yerleştirdiğimde neden bu kadar çok okuma var?