【发布时间】:2015-08-12 19:26:05
【问题描述】:
我们每天会收到数百万条温度指标记录。这些记录的大部分相关元数据按日期(月)保存在单个分区表中。我们将开始接收多达 20 个与此数据相关的单独代码。目的是最终允许通过这些代码进行搜索。
存储这些数据以最大限度地缩短搜索响应时间的最有效方法是什么?数据库是 Oracle 11gR2。
我正在考虑的一些选项:
(1) 使用主记录 id 和代码值创建一个单独的表。类似的东西
id code
-- ----
1 AA
1 BB
1 CC
2 AA
2 CC
2 DD
关注点:
- 可能需要在代码列上使用位图索引,但该表是高度事务性的,因此没有位图
- 随着时间的推移,表格会变得越来越大,每个主记录最多包含 20 个代码
(2) 创建一个按代码值分区的单独表。
关注点:
- 新代码的分区维护
- 搜索性能
(3) 在现有表中添加一个 XMLType 列,并将每条记录的代码格式化为 XML,并在该列上创建一个 XMLIndex:类似于:
<C1>AA</C1>
<C2>BB</C2>
<C3>CC</C3>
关注点:
- 在 CODE 上搜索时的查询响应时间可能会很短
欢迎任何建议。
谢谢。
【问题讨论】:
-
用主记录 id 和代码值创建一个单独的表。代码上的索引对于查询将执行得足够好,并且不会过多地减慢插入速度。我假设在这个单独的表上不会有更新或删除。
-
您的意思是将来您想查询一个表以查找所有具有代码 A 的 ID 或其他代码?每天多达 2000 万条记录的数据量将很快变得难以理解。
标签: oracle performance database-design oracle11g database-partitioning