我有一个包含15,000,000条记录的表。这些记录可以基于某些匹配字段(通常是单个组中的最大值3或4)相互关联。每个记录也有一个与之相关的日期,但是这个日期并不一定与它加载到表格中的日期/订单相关。与大型数据集的视图与索引表的性能
这些记录定期用于更新数据库中的其他记录。尽管如此,我只关心最新的唱片,并且在1500万条唱片(正在更新1000万条唱片)上,我想确保我忽略了其他所有内容。如果最新记录已经有“更新”标志,我也想跳过更新。
我一直在使用这样的一个观点,收集各组内的最新记录:
SELECT a, b, c, max(scan.timestamp) AS latest_scan
FROM scan
GROUP BY a, b, c;
然后我用一个WHERE
子句中我UPDATE
忽略具有更新标志的任何记录。
有了这么多的记录,我可以使用视图吗?我已经看到人们开始创造真正的索引表,以提高性能,但我仍然认为这需要很长时间。这是我可以从中受益吗?
我的错误 - 它应该是GROUP BY而不是ORDER BY。你说这个视图会被用来给优化器信息 - 当使用视图时,它是否考虑到它基于的表的索引? –
基本上所有的视图是,就查询引擎而言是一个带有名称的查询,所以基本上它把select *从MyView看作select * from(视图中的sql),所以它确实使用了基础表指数。 –