据我了解,SQL 视图代表“虚拟表”,其中数据实际上保存在视图引用的其他“后备表”中。可以将索引添加到视图以提高性能,但是如果视图只是一个虚拟表,这些索引实际上引用了什么?(它是后备表上的主键还是什么?)
想象一个由SELECT * FROM bookings WHERE IsDeleted=0表示的视图,带有一个关于bookings.AppointmentDate的索引 ...索引可能按约会日期排序(以便于搜索),并且每个索引叶保存该数据所在的行号在视图中......这会起作用......直到预订发生变化并且一些已删除的预订现在未被删除,建议的索引将保持未对齐。
另一种方法是让索引视图现在实际上是预订表的“分身”,因此它是物化的而不是虚拟的。现在索引可以引用分身拥有的任何主键,因此当预订被取消删除时不会中断。但同样,如果预订表发生变化,这个分身器必须“发现”它应该具有的新行(如未删除的预订)以及在返回结果之前需要从自身中删除的行,这在餐桌上不会很昂贵更新否定了使用索引视图的可能好处?
我试图了解索引视图是如何在幕后工作的。