gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:56:43 28 4
gpt4 key购买 nike

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

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秒内返回。当我在 Select 查询中指定列名时出现什么问题?

编辑:-

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

enter image description here

最佳答案

如果传递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*/

关于sql - 如何提高 SSMS 中 SQL 查询的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34586667/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com