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
Linda Hamiltonasal
2024-12-21 15:18:11328semak imbas

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!

Kenyataan:
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