假设我们有一个带有名称的Tournament
表,该表的列是Id, Name, GameId, TypeId, cityId, Status, Format
. 除了Id
和Name
列我想用这些列的所有组合搜索这个表,我的意思是我可以用GameId & Status
orTypeId & CityId & Status
或搜索Status & Format
。
如您所见,所有搜索选项计数等于
=C(5,1)+C(5,2)+C(5,3)+C(5,4)+C(5,5).
所以这是我的问题,最好的索引方案是什么,为什么?我认为选项是,
- 每列的索引。
- 所有列的复合索引。
我知道复合索引确实比单索引快,但是如果你按照正确的顺序排列,我的意思是如果我在[GameId, TypeId, CityId, Status, Format]
列上有一个复合索引并且搜索GameId = 1 & TypeId = 2 & CityId = 3 & Status = 5 & Format = 6
它会很好用,但是如果我搜索GameId = 1 & Format = 6
我无法意识到这个查询将如何工作足够快,据我所知,SQL Server 复合索引只是一个 b-tree,复合索引的 b-tree 键是从左到右列排序的。