Paket eksekusi grafis SQL Server membaca dari kanan ke kiri dan atas ke bawah. Apakah ada urutan yang berarti untuk output yang dihasilkan oleh SET STATISTICS IO ON
?
Pertanyaan berikut:
SET STATISTICS IO ON;
SELECT *
FROM Sales.SalesOrderHeader AS soh
JOIN Sales.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID
JOIN Production.Product AS p ON sod.ProductID = p.ProductID;
Buat rencana ini:
Dan STATISTICS IO
output ini :
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'SalesOrderDetail'. Scan count 1, logical reads 1246, physical reads 3, read-ahead reads 1277, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'SalesOrderHeader'. Scan count 1, logical reads 689, physical reads 1, read-ahead reads 685, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Product'. Scan count 1, logical reads 15, physical reads 1, read-ahead reads 14, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Jadi, saya tegaskan: apa yang terjadi? Apakah ada pemesanan yang berarti untuk STATISTICS IO
output atau apakah ada perintah sewenang-wenang yang digunakan?
sumber
Saya selalu berpikir itu memiliki perintah, dari belakang ketika saya melakukan lebih banyak pemrograman daripada administrasi. Saya menjalankan beberapa rencana eksekusi dan mengecek kepercayaan saya.
Inilah yang saya lihat:
Dalam kueri multi-langkah (seperti banyak prosedur tersimpan kami), urutan mencerminkan urutan fisik di mana kueri dijalankan.
Untuk permintaan tertentu, sepertinya statistik IO mencerminkan rencana eksekusi dengan melaporkan statistik mulai dari kanan dan bekerja ke kiri.
Mungkin ini lebih dari sekadar pengamatan.
sumber
SELECT COUNT(*) FROM HumanResources.EmployeeDepartmentHistory UNION ALL SELECT COUNT(*) FROM HumanResources.Employee UNION ALL SELECT COUNT(*) FROM HumanResources.Department
juga membalikkanIO
output tetapi tidak menjelaskan mengapa tabel kerja dilaporkan pertama kali dalam contoh dalam pertanyaan.Jadi saya berpikir bahwa hasil statistik io memberikan lebih banyak wawasan tentang apa yang sebenarnya terjadi pada saat runtime, karena akan memperhitungkan dan dipengaruhi oleh kebutuhan untuk membaca dari disk, bukan cache, dan juga dipengaruhi oleh izin akun. bahwa kueri sedang dijalankan di bawah. Posisi tabel dalam statistik kembali kemudian dipengaruhi oleh faktor-faktor lain selain yang dipertimbangkan oleh profiler.
Berikut ini adalah artikel kb yang memberikan wawasan dan beberapa contoh: http://support.microsoft.com/kb/314648
sumber
STATISTICS IO
secara umum. Ini murni tentang urutan bahwa pembacaan berbagai tabel dilaporkan. Saya tidak melihat apa pun tentang ini di tautan Anda.