我正在尝试使用数据存储区索引,我注意到我可以通过多种方式在索引中对属性进行排序:
IsItemActive ▲ + Rating ▲
- or -
Rating ▲ + IsItemActive ▲
上述两个指标有什么区别?一个允许我查询SELECT * FROM Items WHERE Rating > 3 AND IsItemActive = FALSE
但另一个不查询。
答案 0 :(得分:3)
数据存储在很大程度上依赖于索引属性的排序,以强制执行其规则,即每个查询都必须根据结果集的大小进行缩放。
要回答查询,该查询的所有结果必须在索引中按顺序显示。
所以,考虑两个指标:
指数(IsItemActive,评级)
Item(Rating=3, IsItemActive=False) <----
Item(Rating=4, IsItemActive=False) <----
Item(Rating=3, IsItemActive=True)
Item(Rating=4, IsItemActive=True)
Item(Rating=5, IsItemActive=True)
指数(评级,IsItemActive)
Item(Rating=3, IsItemActive=False) <----
Item(Rating=3, IsItemActive=True)
Item(Rating=4, IsItemActive=False) <----
Item(Rating=4, IsItemActive=True)
Item(Rating=5, IsItemActive=True)
为了使您的查询SELECT * FROM Items WHERE Rating > 3 AND IsItemActive = FALSE
能够将所有结果彼此相邻,它必须使用Index(IsItemActive, Rating)
索引。另一个索引没有你需要的所有结果。
Here是一篇关于索引选择如何工作的文章。此外,我强烈推荐Google I/O talk (2008)关于数据存储如何在幕后工作。