Sql server SQL语句已执行或从未执行完毕,冻结SQL数据库
我有一个SQL语句Sql server SQL语句已执行或从未执行完毕,冻结SQL数据库,sql-server,performance,Sql Server,Performance,我有一个SQL语句 SELECT dbo.sem_computer.COMPUTER_NAME,dbo.sem_computer.COMPUTER_ID, [IP_ADDR1_TEXT],dbo.sem_computer.COMPUTER_DOMAIN_NAME, [ID],dbo.SEM_AGENT.AGENT_VERSION FROM sem_computer, [dbo].[V_SEM_COMPUTER], IDENTITY_MAP, SEM_CLIENT,dbo.SEM_AGENT WH
SELECT dbo.sem_computer.COMPUTER_NAME,dbo.sem_computer.COMPUTER_ID,
[IP_ADDR1_TEXT],dbo.sem_computer.COMPUTER_DOMAIN_NAME, [ID],dbo.SEM_AGENT.AGENT_VERSION
FROM sem_computer, [dbo].[V_SEM_COMPUTER], IDENTITY_MAP, SEM_CLIENT,dbo.SEM_AGENT
WHERE [dbo].[V_SEM_COMPUTER].COMPUTER_ID = SEM_COMPUTER.COMPUTER_ID and dbo.IDENTITY_MAP.ID = dbo.SEM_CLIENT.GROUP_ID
and dbo.SEM_COMPUTER.COMPUTER_ID = dbo.SEM_CLIENT.COMPUTER_ID
AND dbo.SEM_COMPUTER.COMPUTER_ID = dbo.SEM_AGENT.COMPUTER_ID
AND NAME = 'My Company\Default Group'
OR NAME = 'My Company\Bronx'
order by [IP_ADDR1_TEXT]
当我试图复制和粘贴此代码时,它会无限期执行,甚至会冻结SQL server
如果我移除
OR NAME = 'My Company\Bronx'
然后SQL语句执行得很好
我们正在使用SQLServer2008
多谢各位
或名称('My Company\Default Group','My Company\Bronx')
应该有用
当您的名称为“我的公司\默认组”时
OR NAME='My Company\Bronx'不在括号内或使用in子句,这意味着它将在满足OR条件的情况下获取所有内容,而忽略所有其他条件
或名称('My Company\Default Group','My Company\Bronx')
应该有用
当您的名称为“我的公司\默认组”时
OR NAME='My Company\Bronx'不在括号内或使用in子句,这意味着它将在满足OR条件的情况下获取所有内容,而忽略所有其他条件
或名称('My Company\Default Group','My Company\Bronx')
应该有用
当您的名称为“我的公司\默认组”时
OR NAME='My Company\Bronx'不在括号内或使用in子句,这意味着它将在满足OR条件的情况下获取所有内容,而忽略所有其他条件
或名称('My Company\Default Group','My Company\Bronx')
应该有用
当您的名称为“我的公司\默认组”时
OR NAME='My Company\Bronx'不在括号内或使用in子句,这意味着它将在满足OR条件的情况下获取所有内容,而忽略所有其他条件。如果编写符合ANSI标准的T-SQL,我认为整个问题会变得更加清楚。因此,您没有在WHERE子句中使用able join条件,而是使用如下内容:
SELECT
dbo.sem_computer.COMPUTER_NAME
, dbo.sem_computer.COMPUTER_ID
, [IP_ADDR1_TEXT]
, dbo.sem_computer.COMPUTER_DOMAIN_NAME
, [ID]
, dbo.SEM_AGENT.AGENT_VERSION
FROM
sem_computer AS COM
INNER JOIN
[dbo].[V_SEM_COMPUTER] AS V
ON
COM.COMPUTER_ID = V.COMPUTER_ID
INNER JOIN
dbo.SEM_CLIENT AS CLI
ON
COM.COMPUTER_ID = CLI.COMPUTER_ID
INNER JOIN
dbo.SEM_AGENT AS AGT
ON
COM.COMPUTER_ID = AGT.COMPUTER_ID
INNER JOIN
IDENTITY_MAP AS IM
ON
CLI.GROUP_ID = IM.ID
然后WHERE子句完成了它的设计任务,即过滤数据。正如前面所建议的那样,这将成为
WHERE
NAME IN('My Company\Default Group','My Company\Bronx')
正如前面所指出的,您遇到的性能问题是,您得到了所有表的交叉连接。但我想如果您以符合ANSI的方式编写联接,您会注意到这一点
我希望这有帮助
Ash我认为,如果编写符合ANSI标准的T-SQL,整个问题就会变得更加清楚。因此,您没有在WHERE子句中使用able join条件,而是使用如下内容:
SELECT
dbo.sem_computer.COMPUTER_NAME
, dbo.sem_computer.COMPUTER_ID
, [IP_ADDR1_TEXT]
, dbo.sem_computer.COMPUTER_DOMAIN_NAME
, [ID]
, dbo.SEM_AGENT.AGENT_VERSION
FROM
sem_computer AS COM
INNER JOIN
[dbo].[V_SEM_COMPUTER] AS V
ON
COM.COMPUTER_ID = V.COMPUTER_ID
INNER JOIN
dbo.SEM_CLIENT AS CLI
ON
COM.COMPUTER_ID = CLI.COMPUTER_ID
INNER JOIN
dbo.SEM_AGENT AS AGT
ON
COM.COMPUTER_ID = AGT.COMPUTER_ID
INNER JOIN
IDENTITY_MAP AS IM
ON
CLI.GROUP_ID = IM.ID
然后WHERE子句完成了它的设计任务,即过滤数据。正如前面所建议的那样,这将成为
WHERE
NAME IN('My Company\Default Group','My Company\Bronx')
正如前面所指出的,您遇到的性能问题是,您得到了所有表的交叉连接。但我想如果您以符合ANSI的方式编写联接,您会注意到这一点
我希望这有帮助
Ash我认为,如果编写符合ANSI标准的T-SQL,整个问题就会变得更加清楚。因此,您没有在WHERE子句中使用able join条件,而是使用如下内容:
SELECT
dbo.sem_computer.COMPUTER_NAME
, dbo.sem_computer.COMPUTER_ID
, [IP_ADDR1_TEXT]
, dbo.sem_computer.COMPUTER_DOMAIN_NAME
, [ID]
, dbo.SEM_AGENT.AGENT_VERSION
FROM
sem_computer AS COM
INNER JOIN
[dbo].[V_SEM_COMPUTER] AS V
ON
COM.COMPUTER_ID = V.COMPUTER_ID
INNER JOIN
dbo.SEM_CLIENT AS CLI
ON
COM.COMPUTER_ID = CLI.COMPUTER_ID
INNER JOIN
dbo.SEM_AGENT AS AGT
ON
COM.COMPUTER_ID = AGT.COMPUTER_ID
INNER JOIN
IDENTITY_MAP AS IM
ON
CLI.GROUP_ID = IM.ID
然后WHERE子句完成了它的设计任务,即过滤数据。正如前面所建议的那样,这将成为
WHERE
NAME IN('My Company\Default Group','My Company\Bronx')
正如前面所指出的,您遇到的性能问题是,您得到了所有表的交叉连接。但我想如果您以符合ANSI的方式编写联接,您会注意到这一点
我希望这有帮助
Ash我认为,如果编写符合ANSI标准的T-SQL,整个问题就会变得更加清楚。因此,您没有在WHERE子句中使用able join条件,而是使用如下内容:
SELECT
dbo.sem_computer.COMPUTER_NAME
, dbo.sem_computer.COMPUTER_ID
, [IP_ADDR1_TEXT]
, dbo.sem_computer.COMPUTER_DOMAIN_NAME
, [ID]
, dbo.SEM_AGENT.AGENT_VERSION
FROM
sem_computer AS COM
INNER JOIN
[dbo].[V_SEM_COMPUTER] AS V
ON
COM.COMPUTER_ID = V.COMPUTER_ID
INNER JOIN
dbo.SEM_CLIENT AS CLI
ON
COM.COMPUTER_ID = CLI.COMPUTER_ID
INNER JOIN
dbo.SEM_AGENT AS AGT
ON
COM.COMPUTER_ID = AGT.COMPUTER_ID
INNER JOIN
IDENTITY_MAP AS IM
ON
CLI.GROUP_ID = IM.ID
然后WHERE子句完成了它的设计任务,即过滤数据。正如前面所建议的那样,这将成为
WHERE
NAME IN('My Company\Default Group','My Company\Bronx')
正如前面所指出的,您遇到的性能问题是,您得到了所有表的交叉连接。但我想如果您以符合ANSI的方式编写联接,您会注意到这一点
我希望这有帮助
Ash我假设您需要在两个条件周围加上括号:
和(NAME='My Company\Default Group'或NAME='My Company\Bronx')
,因为您会得到类似于交叉连接的结果。请参阅@NickyvV的建议。我假设您需要在两个条件周围加上括号:和(NAME='My Company\Default Group'或NAME='My Company\Bronx')
,因为您会得到类似交叉连接的结果。请参阅@NickyvV的建议。我假设您需要在两个条件周围加上括号:和(NAME='My Company\Default Group'或NAME='My Company\Bronx')
,因为您会得到类似交叉连接的结果。请参阅@NickyvV的建议。我假设您需要在两个条件周围加上括号:和(NAME='My Company\Default Group'或NAME='My Company\Bronx')
,因为您会得到类似交叉连接的结果。请参阅@NickyvV的建议。我删除了别名,因为它们给出了错误,例如“多部分标识符”dbo.sem_computer.computer_NAME“无法绑定”。我删除了别名,因为它们给出了错误,例如“多部分标识符”dbo.sem_computer.computer_NAME“无法绑定”我删除了别名,因为它们给出了错误,例如“多部分标识符”dbo.sem_computer.computer_NAME“无法绑定”。我删除了别名,因为它们给出了错误,例如“多部分标识符”dbo.sem_computer.computer_NAME“无法绑定”