假设我有一个包含2列的表我已经知道我永远不会在同一个查询中一起使用。所以,像:
BLACK | WHITE | C1 | C2 | C3 | B1 | B2 | B3 | ...
我也知道在大约80%的查询中,我会询问C1 C2和C3以及BLACK或WHITE中的一个。 如果我定义一个索引,如:
C1,C2,C3, BLACK
当我定义索引时
C1,C2,C3, WHITE
我会重复使用第一部分,包括C1,C2,C3吗?或者会创建一个全新的索引(及其相关的磁盘空间)?
另外,假设C1是具有最高dinstinct值的列(在我的DB中是日期时间列),将它放在第一位是否正确?或者,最好放置C3,假设C3是具有较少dinstinct值的那个?
答案 0 :(得分:0)
我会重复使用第一部分,包括C1,C2,C3吗?或者会创建一个全新的索引(及其相关的磁盘空间)?
将有两个不同的索引占据两倍的数据页面(假设black
和white
具有相似的大小)
另外,假设C1是具有最高dinstinct值的列(在我的DB中它是一个日期时间列),将它放在第一位是否正确?或者,最好放置C3,假设C3是具有较少dinstinct值的那个?
这取决于您的查询。
索引可以用于过滤和排序。
如果您在C1, C2, C3
上创建索引,则可以使用if对(C1)
,(C1, C2)
和(C1, C2, C3)
中的任何一个进行过滤和/或排序。