का उपयोग करते समय एसक्यूएल फ़ंक्शंस को बहुत धीमा करना कॉलिंग मैं अपने सी # एएसपी.Net एप्लिकेशन से SQL फंक्शन (यूडीएफ) को कॉल कर रहा हूं। जिस फ़ंक्शन को मैं कॉल कर रहा हूं उसे "अद्वितीय पहचानकर्ता" प्रकार का एक पैरामीटर चाहिए।एसक्यूएल कॉमांड पैरामीटर
अगर मैं फोन करना और SqlCommand के CommandText में "अशक्त" गुजरती हैं, परिणाम के बारे में 3 सेकंड में वापस आने के लिए ...
SqlCommand Command = new SqlCommand();
Command.Connection = (SqlConnection)(DbDataModifier.CreateConnection());
Command.CommandText = "select * from GetLocalFirmLoginsSummary(null) order by Date asc"
Command.CommandType = CommandType.Text;
Command.Connection.Open();
SqlDataReader Reader = Command.ExecuteReader(); // takes 3 seconds
लेकिन, अगर मैं फोन करना और DBNull गुजरती हैं। एक SqlParameter के रूप में मूल्य, परिणाम अगर मैं एसक्यूएल प्रबंधन स्टूडियो में एक ही क्वेरी चलाने 60 से अधिक सेकंड लग लौटने के लिए ...
SqlCommand Command = new SqlCommand();
Command.Connection = (SqlConnection)(DbDataModifier.CreateConnection());
Command.CommandText = "select * from GetLocalFirmLoginsSummary(@CustomerGroupID) order by Date asc"
Command.CommandType = CommandType.Text;
SqlParameter Param = new SqlParameter();
Param.ParameterName = "@CustomerGroupID";
Param.SqlDbType = SqlDbType.UniqueIdentifier;
Param.Direction = ParameterDirection.Input;
Param.IsNullable = true;
Param.Value = DBNull.Value;
Command.Parameters.Add(Param);
Command.Connection.Open();
SqlDataReader Reader = Command.ExecuteReader(); // takes over 60 seconds
, इसके बारे में 3 सेकंड लेता है, तब भी जब एक पैरामीटर के रूप अशक्त गुजर ..
declare @CustomerGroupID uniqueidentifier
set @CustomerGroupID = null
select * from GetLocalFirmLoginsSummary(@CustomerGroupID)
समारोह मैं फोन कर रहा हूँ के रूप में परिभाषित किया गया है:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetLocalFirmLoginsSummary]
(
@CustomerGroupID uniqueidentifier
)
RETURNS TABLE
AS
RETURN
(
SELECT CustomerGroupID, CustomerGroupName, USR, DATEADD(MONTH, DATEDIFF(MONTH, 0, createdDate), 0) AS Date, COUNT(*) AS Quantity
FROM dbo.GetLocalFirmLogins(@CustomerGroupID) AS Logins
GROUP BY USR, CustomerGroupID, CustomerGroupName, DATEADD(MONTH, DATEDIFF(MONTH, 0, createdDate), 0)
)
...
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetLocalFirmLogins]
(
@CustomerGroupID uniqueidentifier
)
RETURNS TABLE
AS
RETURN
(
SELECT vw_CustomerGroupAccountDetails.CustomerGroupID, vw_CustomerGroupAccountDetails.CustomerGroupName, Organisations.USR, Organisations.town AS FirmTown,
Users.id AS ID, Users.userName, Users.password, Users.isPartner, Users.isFeeEarner, Users.nlisUserName, Users.nlisPassword, Users.email, Users.lastLoginDate, Users.createdDate
FROM vw_CustomerGroupAccountDetails RIGHT OUTER JOIN
Organisations ON vw_CustomerGroupAccountDetails.AccountID = CAST(Organisations.id AS nvarchar(50)) RIGHT OUTER JOIN
Users ON Organisations.clientId = Users.uploadedBy
WHERE (Users.canLogin = 1) AND (Users.isDeleted = 0) AND (NOT (Organisations.USR IS NULL)) AND
((vw_CustomerGroupAccountDetails.CustomerGroupID = @CustomerGroupID) OR (@CustomerGroupID IS NULL))
)
तो क्या हुआ तो बहुत लंबे समय तक लेने के लिए जब मैं सी # से एसक्यूएल समारोह फोन कर रहा हूँ यह कारण बनता है एक SQLCommand के एक वर्गमीटर का उपयोग कर?
मैं एसक्यूएल सर्वर का उपयोग कर रहा 2000
मैं हर जगह और हर तरह से मैं के बारे में सोच सकते हैं में खोज की है, लेकिन किसी और एक समान समस्या हो रही नहीं मिल रहा।
जब आप एसक्यूएल कहते हैं, तो आप डेटाबेस-स्वतंत्र [संरचित क्वेरी भाषा] (http://stackoverflow.com/questions/tagged/sql) के बारे में बात नहीं कर रहे हैं, आप माइक्रोसॉफ्ट डेटाबेस उत्पाद [SQL सर्वर पर चर्चा कर रहे हैं ] (http://stackoverflow.com/questions/tagged/sql- सर्वर), सही? –
काफी संभावित पैरामीटर स्नीफिंग। –
क्या आपने परीक्षण किया है कि यह शून्य के लिए विशिष्ट है? सामान्य मूल्य के साथ क्या? – Sebas