复合索引和查询到单个列:我需要一个索引吗?

时间:2017-09-18 20:32:19

标签: sql sql-server indexing

我有一个表SchoolMembers,它有两列:

  person_id   school_id
 -------------------------
    1134       361
    1135       362
         ...

此表的主键是{person_id, school_id},因此这种组合是唯一的。

主键使用名为PK_dbo.SchoolMembers

的索引编制索引
  • person_id没有INDEX
  • school_id没有INDEX
  • {person_id, school_id}有一个INDEX

问题:如果我有这个问题:

     SELECT * from SchoolMembers where person_id = 1135

......我应该有person_id的INDEX吗?我需要先前的查询快速

2 个答案:

答案 0 :(得分:7)

  

问题:如果我有这个问题:        SELECT * from SchoolMembers where person_id = 1135   ......我应该为person_id设一个INDEX吗?

没有。 {person_id,school_id}上的唯一索引就足够了。通常,索引可用于其前导列的有效访问。

答案 1 :(得分:3)

主键列的顺序有所不同。您已将自己的密钥描述为person_id然后school_id。使用该设置,在person_id上搜索时,您应该获得良好的性能。然而事实恰恰相反。如果您要按school_id进行搜索,则无法快速找到该行。