200分:在海量数据中查询有无,应该用什么技术路线才能实现尽可能的快?

hpygzhx520 2019-04-14 02:37:22
数据库用了多年,但理解一直很粗浅。现在涉及一个场景,才在方案讨论阶段,有些问题没有头绪,所以请教一下数据库专家。谢谢。

假定数据库其中一个表就两个字段,第一个字段是一个32个字符的条形码(唯一值,不允许重复),第二个字段是时间(其实第一个字段条形码中有190414这样的固定部分,也可以当做时间)。
这个表可能是无限大的,但是我不需要从所有数据中查询,否则查询应该会随着数据量增多而变慢的吧?
我需要查最近半年的数据,用日期过滤,过滤后的数据行数上限是50万行,也就是半年内的数据不可能大于50万行。我需要查询某个条码在这50万行中是否存在,应该怎么设计才会让这个查询尽可能的快,比如2秒内?

初步构思;
方案1:常规方法,直接select count(barcode) from t_barcode where opttime <sysdate-150;
方案2:把数据先读入内存datatable,程序在开启的时候做这个读入操作,这个阶段就算消耗一些时间也可以接受,内存消耗大一些也可以接受。查询的时候使用某种手段在datatable中查询。
方案3:既然barcode是主键,我就不管时间,直接操作插入这个数据,报主键重复错误则表示重复。
方案4……n都不知道了。

请教专家们,应该用什么方法实现这个目标?(自己搭建测试环境主要担心自己的电脑和服务器的性能差异导致测试结果没有参考性)。

不胜感激!
...全文
335 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpygzhx520 2019-04-15
  • 打赏
  • 举报
回复
非常感谢各位的回复!我会认真学习的。
nayi_224 2019-04-15
  • 打赏
  • 举报
回复
也可以再参考一下函数索引、索引组织表。
AHUA1001 2019-04-15
  • 打赏
  • 举报
回复
ORACLE对海量数据的处理,常见的就3种。
1、索引。
2、分区。
3、存储,就是把你需要的结果,存储在某个字段中,每次数据有变化,都需要维护这个字段。也就是把查询成本,转移到添删改上了。
您的需求,应该只适用于前两种。
用日期做分区,用条码做索引。
按照你的要求,应该是按月做分区。
如何正确的使用索引和分区,就是另外一个问题了,上网百度一下,应该不难。
你如果只想知道有没有,可以在count语句的where里,增加rownum <= 1,这样做的目的,就是为了在扫描到一条结果后,马上返回,不再搜索其它的内容了,以此来提高搜索速度。
  • 打赏
  • 举报
回复
前面的数据,作用大吗? 可以分表,如定时rename一下 create一个新表。 用楼上的分区表也可以。
hpygzhx520 2019-04-14
  • 打赏
  • 举报
回复
感谢回复,我先百度学习下分区表。
卖水果的net 2019-04-14
  • 打赏
  • 举报
回复
楼主这个情况,可以考虑一下分区表,每个月一个分区,再你的 barcode 列,创建本地索引唯一。

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧