我已使用以下查询从数据库中获取记录。
SELECT
[dbo].[CamelCase](ISNULL(B.City, '')),
CONVERT(VARCHAR(250), ISNULL(B.Addr1, '') + '/' + ISNULL(B.Addr2, '') + '/' + ISNULL(B.Area, '') + '/' + ISNULL(B.City, '') + '/' + ISNULL(B.State, '')),
ISNULL(B.YardName, ''),
DATEADD(HH, 10, CONVERT(DATETIME, A.Date_From)),
DATEADD(HH, 17, CONVERT(DATETIME, A.Date_To)),
'',
ISNULL(B.Zone, ''),
'',
'',
ISNULL(B.ContactPerson, ''),
B.Mobile,
ISNULL(B.EMailId, ''),
'',
A.AucCode,
[dbo].[CamelCase](B.State),
B.Pincode,
[dbo].[CamelCase](ISNULL(B.City, ''))
FROM dbo.TBL_Auction A
JOIN dbo.TBL_PLACE B ON A.Auc_Place_Fk_Id = B.Place_Pk_Id
TBL_Auction表中的索引:
Index Name ------------------- + Column Name -------- + Index Type
PK__PASS_AUC__8BC43C38517CE882 | Auc_Pk_Id | CLUSTERED
IX_PASS_Created_On | Created_On | NONCLUSTERED
Unq_Pass_Auction | Auc_Code | NONCLUSTERED
Unq_Pass_Auction | Auc_Place_Fk_Id | NONCLUSTERED
FK_Pass_Place | Auc_Place_Fk_Id | NONCLUSTERED
TBL_Place表中的索引:
Index Name ------------------ + Column Name------- + Index Type
PK__PASS_PLA__4F8634950F7A1AFB | Place_Pk_Id | CLUSTERED
IX_PASS_PLACE_I | Place_Area | NONCLUSTERED
IX_PASS_PLACE_I | Place_City | NONCLUSTERED
IX_PASS_PLACE_I | Place_State | NONCLUSTERED
IX_PASS_PLACE_I | Place_Country | NONCLUSTERED
IX_PASS_PLACE_I | Place_Pincode | NONCLUSTERED
IX_PASS_PLACE_IV | Place_Shrt_Code | NONCLUSTERED
但是上面的查询需要无限的时间才能返回结果。
我已经为联接表创建了所有必需的索引。即使在那之后,优化器也选择索引扫描而不是索引查找。您可以在我的问题中查看两个表的索引列表。如何迫使优化器选择索引查找?
当我使用Select *而不是指定Select Column Names时,此时查询结果已在1秒内返回。在“选择查询”中指定列名时会出现什么问题?
编辑:-
ALTER FUNCTION [dbo].[CamelCase]
(@Str varchar(8000))
RETURNS varchar(8000) AS
BEGIN
DECLARE @Result varchar(2000)
SET @Str = LOWER(@Str) + ' '
SET @Result = ''
WHILE 1=1
BEGIN
IF PATINDEX('% %',@Str) = 0 BREAK
SET @Result = @Result + UPPER(Left(@Str,1))+
SubString (@Str,2,CharIndex(' ',@Str)-1)
SET @Str = SubString(@Str,
CharIndex(' ',@Str)+1,Len(@Str))
END
SET @Result = Left(@Result,Len(@Result))
RETURN @Result
END
如果NULL
作为唯一退出方法通过而传递,您的驼峰式案例函数将陷入无限循环PATINDEX('% %',@Str)= 0
,并且评估结果为未知。
您需要解决此问题。
RETURNS NULL ON NULL INPUT
为了安全起见,您也可以使用,我也会明确地处理它。
ALTER FUNCTION [dbo].[CamelCase]
(@Str VARCHAR(8000))
RETURNS VARCHAR(8000)
WITH RETURNS NULL ON NULL INPUT,
SCHEMABINDING
AS
BEGIN
IF @Str IS NULL
RETURN NULL;
/*.... Rest of function*/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句