针对大型数据库优化ms sql select查询

针对大型数据库优化ms sql select查询,sql,sql-server,select,optimization,Sql,Sql Server,Select,Optimization,我的问题是 SELECT DISTINCT Company.Name, Customer.FirmID, Customer.ID, Customer.ExtendedId, (CustomerExtended.FirstName + ' ' + CustomerExtended.LastName) as "Customer Name" FROM Company, Customer, CustomerExtended WHERE

我的问题是

SELECT DISTINCT
    Company.Name,
    Customer.FirmID,
    Customer.ID,
    Customer.ExtendedId,
    (CustomerExtended.FirstName + ' ' + CustomerExtended.LastName) as "Customer Name"

FROM
    Company,
    Customer,
    CustomerExtended

WHERE
    (Customer.ExtendedId = 1) OR
    (CustomerExtended.FirstName = 'John' AND CustomerExtended.LastName = 'Smith')

由于数据库非常庞大,我一次也没能执行这个查询evan。我等了两个小时,但它一直在运行。有没有办法对此进行优化?

除非您的客户群是每一个人,否则我怀疑您的数据库实际上“非常庞大”,因此我认为您可能需要
加入表以获得所需的结果

例如:


有关联接的解释,请参阅。

除非您的客户群是每一个人,否则我怀疑您的数据库实际上“非常庞大”,因此我认为您可能需要
联接表以获得所需的结果

例如:


有关联接的解释,请参阅。

如果需要使用DISTINCE,则可能是做错了什么。在这种情况下,您没有加入表(或者没有正确加入表,您所做的被称为交叉加入)


id应该是主键,fk列应该是指向主键的外键

如果需要区分,可能是做错了什么。在这种情况下,您没有加入表(或者没有正确加入表,您所做的被称为交叉加入)


id应该是主键,fk列应该是指向主键的外键

是否确实需要交叉联接?它将组合每个表中的每一行,然后应用where条件。如果有许多行,则可以启动一个族,直到If完成。您应该发布示例数据和预期结果。SQL查询似乎显示出对关系数据库的工作方式缺乏了解。您真的需要交叉联接吗?它将组合每个表中的每一行,然后应用where条件。如果有许多行,您可以启动一个族,直到If完成。您应该发布示例数据和预期结果。SQL查询似乎表明对关系数据库的工作方式缺乏了解。
FROM
    Company 
        inner join Customer on Company.CompanyID = Customer.FirmID
    ...
SELECT 
    com.Name,
    cus.FirmID,
    cus.ID,
    cus.ExtendedId,
    cue.FirstName + ' ' + cue.LastName as [Customer Name]
FROM Company com 
JOIN Customer cus
ON com.id = cus.fk_Company
JOIN CustomerExtended cue
ON cue.fk_Customer = cus.id
WHERE
    (cus.ExtendedId = 1) OR
    (cue.FirstName = 'John' AND cue.LastName = 'Smith')