2个sql索引,相同列但差异顺序有什么区别

时间:2016-12-29 21:37:17

标签: sql-server indexing

我在表上有2个sql索引,如:

  1. idx_Inventory_One(SupplierId,PartId)
  2. idx_Inventory_Two(PartId,SupplierId)
  3. 那么,它们之间有什么区别,我应该删除任何一个 我可以同时拥有它们吗?

1 个答案:

答案 0 :(得分:2)

索引没有坏处。它们在插入,更新和删除方面花费了一些内存和一些额外的时间,但这通常是可以忽略的。

索引中列的顺序可以有所不同。

 select supplierid from mytable where partid = 5;

这里我们需要一个以partid开头的索引,以便找到所需的记录。以supplierid开头的索引对此查询几乎没有用处。

 select partid from mytable where supplierid = 123;

另一方面,我们需要一个以supplierid开头的索引,以便快速找到所需的记录。

 select * from mytable where partid = 5 and supplierid = 123;

对于此查询,索引应该没问题。根据列的选择性,DBMS可能会选择它认为更合适的那个。这意味着如果有一千条记录的partid = 5,但只有十条记录,其中supplierid = 123,它可能会使用以supplierid开头的索引来获取十条记录,并检查这十条记录中的哪一条具有partid = 5,而不是读取千位partid 5索引条目以检查它们是否有supplierid = 123。