Fungsi Bernilai Jadual: Sebaris lwn. Berbilang Penyata – Analisis Prestasi
Memilih antara Fungsi Bernilai Jadual (TVF) sebaris dan berbilang pernyataan memberi kesan ketara kepada prestasi pertanyaan. Perbandingan ini menyerlahkan perbezaan utama dan memberikan panduan tentang penggunaan optimum.
Fungsi Bernilai Jadual Sebaris (ITVF)
ITVF, serupa dengan paparan, memanfaatkan struktur jadual dan statistik masa nyata, selalunya membawa kepada pelan pelaksanaan yang unggul. Berikut ialah contoh:
<code class="language-sql">CREATE FUNCTION MyNS.GetUnshippedOrders() RETURNS TABLE AS RETURN SELECT a.SaleId, a.CustomerID, b.Qty FROM Sales.Sales a INNER JOIN Sales.SaleDetail b ON a.SaleId = b.SaleId INNER JOIN Production.Product c ON b.ProductID = c.ProductID WHERE a.ShipDate IS NULL GO</code>
Fungsi Bernilai Jadual Berbilang Penyata (MSTVF)
MSTVF menggunakan struktur jadual yang telah ditetapkan dan kekurangan akses kepada statistik masa nyata. Struktur mereka berbeza seperti berikut:
<code class="language-sql">CREATE FUNCTION MyNS.GetLastShipped(@CustomerID INT) RETURNS @CustomerOrder TABLE (SaleOrderID INT NOT NULL, CustomerID INT NOT NULL, OrderDate DATETIME NOT NULL, OrderQty INT NOT NULL) AS BEGIN DECLARE @MaxDate DATETIME SELECT @MaxDate = MAX(OrderDate) FROM Sales.SalesOrderHeader WHERE CustomerID = @CustomerID INSERT @CustomerOrder SELECT a.SalesOrderID, a.CustomerID, a.OrderDate, b.OrderQty FROM Sales.SalesOrderHeader a INNER JOIN Sales.SalesOrderHeader b ON a.SalesOrderID = b.SalesOrderID INNER JOIN Production.Product c ON b.ProductID = c.ProductID WHERE a.OrderDate = @MaxDate AND a.CustomerID = @CustomerID RETURN END GO</code>
Pertimbangan Prestasi
Secara amnya, ITVF mengatasi MSTVF kerana keupayaan mereka untuk memanfaatkan statistik masa nyata. Walau bagaimanapun, MSTVF mungkin lebih cekap untuk operasi kompleks yang tidak mudah dilaksanakan dalam ITVF.
Bila Menggunakan Jenis Fungsi Yang Mana
Pilih ITVF apabila:
Pilih MSTVF apabila:
Kesimpulan
Pilihan optimum antara ITVF dan MSTVF bergantung sepenuhnya pada tugas tertentu. Walau bagaimanapun, ITVF biasanya lebih disukai kerana kelebihan prestasinya dan penggunaan statistik pangkalan data yang lebih baik.
Atas ialah kandungan terperinci Fungsi Bernilai Jadual Sebaris lwn Berbilang Penyata: Mana Berprestasi Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!