如何提高SSMS中SQL查询的执行时间?

RGS

我已使用以下查询从数据库中获取记录。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章