Rumah >pangkalan data >tutorial mysql >Mengapa Prosedur Tersimpan Saya Mengalami Isu Prestasi Walaupun dengan Parameter NULL, dan Bagaimana Saya Boleh Membetulkannya?
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!