怎么样才能提高检索效率? 1C

1、我现在有一张过车表(ITS_CAR_PASS),主要字段PASS_DATETIME(过车时间),PASS_PLATE_NO(号牌号码),PASS_PLATE_TYPE(号牌种类),PASS_PLATE_COLOR(号牌颜色),PASS_DEVICE_UNID(设备unid编号),2年的数量是大约20亿,是不是一定要采用大数据的架构来提高搜索速度。搜索条件常用是过车时间+号牌号码(精确,模糊),过车时间+号牌号码(精确,模糊)+号牌种类。还有一些统计报表经常会使用group by,和一些oracle函数,导致效率很差。

2、我要怎么设计才能提高搜索效率,之前采用oracle数据库,实现根据过车时间按月分表,表根据过车时间按小时分区。但是随着私家车数据量递增,过车数据也递增,数量越来越大,检索速度越来越慢,而且做一些业务上的分析操作,效率很差。

3个回答

按月、按小时分表分区的思路是没问题的,这样的话,过车时间不会成为效率瓶颈。我估计你的效率瓶颈出现在车牌的查询上。
如果号牌号码只有精确查询,那么在这一项上建立哈希索引,能极大提高检索速度。

如果号牌号码还需要支持模糊搜索,那就很困难了。下面几种解决方案,都只能在一定程度上解决:
1. 在检索时,先检索过车时间,筛选完后再检索号牌。
2. 根据号牌的前几位分区,或者依据前几位建立二级B树索引,但这样只能支持给定前几位的模糊查询,不支持任意位的模糊查询,而且效率会低于哈希索引。
3. 根据模糊查询的条件,遍历出所有可能的结果,一一代入SQL语句做精确搜索,这样就可以利用上索引。但这样的搜索效率也不好说。

如果要支持完全的模糊查询,那必须遍历全表,想提高效率非常困难。建议不要完全依靠数据库的检索技术,而是在需求上考虑一下,是不是一定要用模糊搜索?搜索的需求能不能在一定程度上向精确搜索靠拢?换句话说,就是先简化问题,再依靠数据库。前面提的几种是我想到的解决方案,但不一定符合你的要求,仅供参考。

wukele
wukele 回复cxsmarkchan: 模糊查询号牌号码,主要是不能确定那几位要模糊,例如闽C178*9,闽C*17869,也有可能多位不清楚
接近 4 年之前 回复
wukele
wukele 回复cxsmarkchan: 模糊查询号牌号码,主要是不能确定那几位要模糊,例如闽C178*9,闽C*17869,也有可能多位不清楚
接近 4 年之前 回复
wukele
wukele 回复cxsmarkchan: 模糊查询号牌号码,主要是不能确定那几位要模糊,例如闽C178*9,闽C*17869,也有可能多位不清楚
接近 4 年之前 回复
a32782913
天涯踏歌人 有理,任何问题都可以简化,不是非要按照用户要求来设计,而是要模仿出用户满意的效果
接近 4 年之前 回复

可以采用把多个表的数据加到一张表上,这样检索的话可以通过一条sql进行查询

wukele
wukele 按照你的想法,你可以试试查询要多久
接近 4 年之前 回复

为经常用于搜索条件的字段添加索引,优化sql

u010603019
若邪 或者建立视图,这些都是思路
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问