Sql 使用联接优化查询

Sql 使用联接优化查询,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,我正试图找出一种更有效的方法来编写我的公司使用的查询。目前我们正在使用左连接,但我觉得这可能是一种不好的方法 你们将如何处理这个问题?我正在尝试熟悉EXISTS和CROSS应用程序。也许在这种情况下,我应该使用这些类型的语句 SELECT p.people_id , p.date_created , p.last_name , p.first_name , p.middle_name , p.known_as ,

我正试图找出一种更有效的方法来编写我的公司使用的查询。目前我们正在使用左连接,但我觉得这可能是一种不好的方法

你们将如何处理这个问题?我正在尝试熟悉EXISTS和CROSS应用程序。也许在这种情况下,我应该使用这些类型的语句

SELECT  p.people_id ,
        p.date_created ,
        p.last_name ,
        p.first_name ,
        p.middle_name ,
        p.known_as ,
        p.ssn ,
        p.home_phone ,
        p.work_mobile ,
        p.other_phone ,
        p.display_email ,
        s.source ,
        ISNULL(p.address_1, '') AS address_1 ,
        ISNULL(p.address_2, '') AS address_2 ,
        p.city ,
        p.state ,
        p.zip_code ,
        pec.emergency_name ,
        pec.work_phone ,
        pec.emergency_relationship ,
        jc.job_category ,
        et.education_type ,
        pp.part_time_only ,
        pp.perm_job ,
        pp.temp_job ,
        p.applied_online ,
        p.owner_division_id ,
        p.role_id ,
        p.older_18 ,
        p.disclaimer ,
        SUBSTRING(p.ssn, 6, 4) AS L4_ssn ,
        pp.custom_code_4 AS job_title ,
        p.external_id ,
        p.last4 ,
        p.resume_category ,
        rc.resume_category_description ,
        p.home_phone_perm ,
        p.work_mobile_perm
FROM    people p
        LEFT OUTER JOIN lkp_resume_category rc ON p.resume_category = rc.resume_category_id
        LEFT OUTER JOIN people_profile pp ON pp.people_id = p.people_id
        LEFT OUTER JOIN companies_job_titles cjt ON cjt.job_title_id = pp.job_title_1
        LEFT OUTER JOIN lkp_job_categories jc ON jc.job_category_id = pp.job_class_id
        LEFT OUTER JOIN lkp_education_types et ON et.education_type_id = pp.education_id
        LEFT OUTER JOIN lkp_sources s ON pp.source_id = s.source_id
        LEFT OUTER JOIN people_emergency_contacts pec ON p.people_id = pec.people_id
WHERE   ( p.role_id <= 4 )

这里实际上有两个独立的问题:

我应该使用左连接吗? 如何提高查询效率?
我先回答2,因为我觉得它更容易。在查询计划中,超过70%的成本来自人员表的表扫描。因此,您可以全天优化连接,但仍然不能大大提高效率。关键的问题是,您的员工中有多大比例的人拥有一个角色?这里实际上有两个独立的问题:

我应该使用左连接吗? 如何提高查询效率?
我先回答2,因为我觉得它更容易。在查询计划中,超过70%的成本来自人员表的表扫描。因此,您可以全天优化连接,但仍然不能大大提高效率。关键的问题是,您的员工中有多大比例的人拥有一个角色?这里实际上有两个独立的问题:

我应该使用左连接吗? 如何提高查询效率?
我先回答2,因为我觉得它更容易。在查询计划中,超过70%的成本来自人员表的表扫描。因此,您可以全天优化连接,但仍然不能大大提高效率。关键的问题是,您的员工中有多大比例的人拥有一个角色?这里实际上有两个独立的问题:

我应该使用左连接吗? 如何提高查询效率?
我先回答2,因为我觉得它更容易。在查询计划中,超过70%的成本来自人员表的表扫描。因此,您可以全天优化连接,但仍然不能大大提高效率。关键的问题是,你的员工中有多大比例的人的角色id看起来不像是内部连接。但是看一下执行计划,你应该研究索引你的表。我打错了。谢谢你指出。看起来不像是内部连接。但是看一下执行计划,你应该研究索引你的表。我打错了。谢谢你指出。看起来不像是内部连接。但是看一下执行计划,你应该研究索引你的表。我打错了。谢谢你指出。看起来不像是内部连接。但是看一下执行计划,你应该研究索引你的表。我打错了。谢谢你指出这一点。
Person   Profile   Contact
------   -------   -------
Bob      Work      Alice
Bob      Home      Alice
Bob      Work      Carol
Bob      Home      Carol