我并不是指数方面的专家--我现在正试着用我的方式完成一些材料。
不管怎么说,假设我有一张桌子,上面有超过3年的700万张记录。然而,最常见的查询将使用整数字段(unix纪元时间),比如最后3个月。
这个3个月的查询通常需要18秒--但是很多其他的查询可能都建立在它之上,所以我试图加快它的速度。我在unix_epoch_time int字段上创建了一个聚集索引,该索引最终将位于“where”语句筛选器中。
然而,这似乎根本没有加快查询时间。这是否意味着这个聚集索引是一种虚假的浪费?或者大约占查询时间的1%?我以为会快得多。
发布于 2017-12-01 11:47:54
您会问聚集索引是否是一种浪费:理想情况下,聚集索引是唯一的、相对较小的,并且一旦创建(请参阅https://www.red-gate.com/simple-talk/sql/learn-sql-server/effective-clustered-indexes/ ),您的整数字段肯定很小,但我猜它并不是唯一的,尽管不可能从问题中判断出来。
要回答这个问题,您可以使用一个标识(1,1)作为聚集索引键,然后使用Unix时间字段创建一个非聚集索引。为了使查询更快,您可以在非聚集索引中包括常用的列,如果查询被索引所覆盖,它们甚至不需要访问主表。
另外,如果您最后3个月的数据可以根据特定的日期范围定义,您甚至可以构建一个筛选索引,以限制索引的大小并加快搜索速度。根据使用1m+行表的经验,如果您控制索引,那么您应该能够在不到一秒钟的时间内满足大多数查询。
https://dba.stackexchange.com/questions/189792
复制相似问题