Rumah > pangkalan data > tutorial mysql > Mengapa pertanyaan SQL saya pantas dalam SSMS tetapi lambat dalam ASP.NET?

Mengapa pertanyaan SQL saya pantas dalam SSMS tetapi lambat dalam ASP.NET?

Linda Hamilton
Lepaskan: 2024-12-31 21:54:14
asal
969 orang telah melayarinya

Why is my SQL query fast in SSMS but slow in ASP.NET?

Memahami Percanggahan Prestasi SQL Antara SSMS dan ASP.NET

Anda mengalami perbezaan prestasi yang ketara apabila melaksanakan pertanyaan SQL dalam SSMS berbanding kepada ASP.NET. Pertanyaan, yang ditunjukkan di bawah, berjalan dalam beberapa saat dalam SSMS, tetapi memerlukan beberapa minit di tapak web anda.

DECLARE @customerID INT
SET @customerID = @CustID
DECLARE @MyTable table(
Iden int NOT NULL IDENTITY(1,1),
ProductID int)

INSERT INTO @MyTable(ProductID)
SELECT P.ProductID FROM Product P WITH (NOLOCK)
left join Compunix_ProductMMY cpmmy with (nolock) on p.ProductID = cpmmy.ProductID
left join Compunix_CustomerMMY ccmmy with (nolock) on ccmmy.mmyid = cpmmy.mmyid
WHERE P.Deleted=0 AND P.Published=1 and (ccmmy.customerid = @customerID OR cpmmy.productid IS NULL)

SELECT c.Name, c.SeName, c.CategoryID
FROM Category c WITH (NOLOCK) 
JOIN ProductCategory PC With (NOLOCK) ON C.CategoryID = PC.CategoryID
JOIN @MyTable MT ON PC.ProductID=MT.ProductID
WHERE C.Published = 1
GROUP BY c.Name, c.SeName, c.CategoryID
ORDER BY c.Name
Salin selepas log masuk

Penyebabnya: Menghidu Parameter

The kemungkinan besar punca percanggahan ini ialah penghidu parameter. Menghidu parameter ialah teknik pengoptimuman prestasi yang mana SQL Server menganalisis parameter pertanyaan pada kali pertama ia dilaksanakan dan mencipta pelan pelaksanaan berdasarkan parameter tersebut. Jika parameter pertanyaan berubah kemudian, SQL Server mungkin tidak menyusun semula pelan pelaksanaan dan terus menggunakan pelan asal, yang mungkin tidak optimum untuk parameter baharu.

Dalam kes ini, prestasi pertanyaan mungkin merosot kerana pelan pelaksanaan yang dioptimumkan untuk kali pertama anda menjalankan pertanyaan dengan nilai khusus untuk @CustID tidak sesuai untuk larian berikutnya dengan @CustID yang berbeza nilai.

Menyelesaikan Isu

Untuk mengurangkan penghidu parameter, anda boleh menggunakan pembayang FORCESEEK dalam pertanyaan. Ini memaksa SQL Server untuk membuat pelan pelaksanaan baharu untuk setiap pelaksanaan pertanyaan, memastikan ia menggunakan pelan optimum untuk parameter yang diberikan.

Untuk menyelesaikan isu, ubah suai pertanyaan anda seperti berikut:

DECLARE @customerID INT
SET @customerID = @CustID
DECLARE @MyTable table(
Iden int NOT NULL IDENTITY(1,1),
ProductID int)

WITH (FORCESEEK)
INSERT INTO @MyTable(ProductID)
SELECT P.ProductID FROM Product P WITH (NOLOCK)
left join Compunix_ProductMMY cpmmy with (nolock) on p.ProductID = cpmmy.ProductID
left join Compunix_CustomerMMY ccmmy with (nolock) on ccmmy.mmyid = cpmmy.mmyid
WHERE P.Deleted=0 AND P.Published=1 and (ccmmy.customerid = @customerID OR cpmmy.productid IS NULL)

SELECT c.Name, c.SeName, c.CategoryID
FROM Category c WITH (NOLOCK) 
JOIN ProductCategory PC With (NOLOCK) ON C.CategoryID = PC.CategoryID
JOIN @MyTable MT ON PC.ProductID=MT.ProductID
WHERE C.Published = 1
GROUP BY c.Name, c.SeName, c.CategoryID
ORDER BY c.Name
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa pertanyaan SQL saya pantas dalam SSMS tetapi lambat dalam ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan