Rumah > pangkalan data > tutorial mysql > Mengapa Prosedur Tersimpan Saya Mengalami Isu Prestasi Walaupun dengan Parameter NULL, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Prosedur Tersimpan Saya Mengalami Isu Prestasi Walaupun dengan Parameter NULL, dan Bagaimana Saya Boleh Membetulkannya?

Linda Hamilton
Lepaskan: 2024-12-21 15:18:11
asal
333 orang telah melayarinya

Why Does My Stored Procedure Suffer Performance Issues Even with a NULL Parameter, and How Can I Fix It?

Sniffing Parameter dan Prestasi Pelan Pelaksanaan Prosedur Tersimpan

Prosedur tersimpan mengalami masalah prestasi apabila dilaksanakan dengan @MyDate sebagai NULL, walaupun pelan pelaksanaan yang dihasilkan adalah suboptimum. Isu ini berterusan tanpa mengira sama ada @MyDate sebenarnya NULL atau ditetapkan kepada cap waktu semasa oleh pernyataan IF.

Pelan pelaksanaan yang bermasalah dipercayai disebabkan oleh penghidu parameter, di mana SQL Server menyusun prosedur tersimpan berdasarkan nilai parameter yang disediakan pada masa penyusunan. Walau bagaimanapun, dalam kes ini, isu ini timbul walaupun parameter adalah NULL, yang bercanggah dengan senario penghidu parameter biasa.

Melumpuhkan penghidu parameter dengan memalsukan parameter (@MyDate_Copy) menyelesaikan isu. Ini menunjukkan bahawa pelayan menggunakan pelan pelaksanaan yang salah berdasarkan nilai NULL sewenang-wenangnya.

Insight into the Fenomena

Menurut jawapan yang diterima, parameter menghidu dalam SQL Server 2005 diketahui mempunyai masalah yang boleh membawa kepada rancangan pelaksanaan yang lemah. Ia membuat spekulasi bahawa pelayan menjana pelan yang tidak berkesan berdasarkan nilai parameter yang tidak mewakili, walaupun apabila parameter tersebut adalah NULL. Selain itu, masalah dengan LEFT JOIN dan NULL telah diperhatikan, yang telah diselesaikan dengan menggantikannya dengan NOT IN atau NOT EXISTS.

Penyelesaian

Untuk SQL Server 2008, Pilihan OPTIMASI UNTUK TIDAK DIKENALI boleh digunakan untuk mengurangkan isu.

Atas ialah kandungan terperinci Mengapa Prosedur Tersimpan Saya Mengalami Isu Prestasi Walaupun dengan Parameter NULL, dan Bagaimana Saya Boleh Membetulkannya?. 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