500W条数据 快速插入,快速查询。

时间:2022-08-16 23:23:46
字段  A(唯一),B,C
插入要求: 30分钟 插入500W条
查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.

帮A加索引  500W条数据在30分钟内无法完成插入.
不加索引   无法实现0.2秒内完成查询.

目前我的解决方案加索引,分表。 控制表中的数据不超过100W。   

但觉得 这个方案太笨, 
各位大侠有更好的方案吗(列存储就算了,版本太老,不支持).

18 个解决方案

#1


该回复于2013-06-12 10:03:33被管理员删除

#2


插入数据时失效索引,插入完成后重建索引 500W条数据 快速插入,快速查询。

#3


表上建二级分区索引,一级分区是A,二级分区是B

#4


500W条记录,30分钟插入应该没有问题。建议你看一下插入时候的等待,为什么没完成插入操作。
对于索引,可以用1楼的方法,先失效,再生效。
还可以把索引换成nologging模式

#5


大量数据插入,考虑楼上说的使用nologging模式,减少redo日志,可以加快速度,
但必须要注意数据库归档模式,nologging在归档模式下要并行加载append的时候才有效

#6


這個方案如何?
用物化視圖,源表上沒有index,快照視圖上建立index

#7


插入数据前把索引删除。插入数据时用不写日志的方法,当然还有oracle的一些暗示的方法。数据插入完成后,在重建索引。

#8


LZ的意思是insert和select是并行的吗?

#9


1)LZ 能把大概的业务介绍一下吗?大体是该业务表主要是做什么用的?
2)能把之前insert和select的执行计划贴上来看看吗?这样有助于分析慢在哪

#10


APPEND nologging插入,然后建索引

#11


用了1楼的方法, 对500W数据 建立索引 需要5分钟左右时间。时间太长。这段时间查询会很卡。

具体情况是这样的, 平均每天的数据插入量是500W条。同时必须满足查询速度在0.2秒一下。
PS 系统 是7*24小时的。 

   

#12


楼主给的信息量太少!!!!让人有心无力

#13


mark 500W条数据 快速插入,快速查询。

#14


7*24小时,同时兼顾插入与查询。

#15


我觉得0.2秒查出这么多数据是不大可能的

#16


引用 15 楼 ccs02287 的回复:
我觉得0.2秒查出这么多数据是不大可能的


这个是可以实现的,因为他的查询要求可能仅仅是一条,或者某个范围的数据,而不是500W条

查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.

#17


引用 16 楼 ziwen00 的回复:
Quote: 引用 15 楼 ccs02287 的回复:

我觉得0.2秒查出这么多数据是不大可能的


这个是可以实现的,因为他的查询要求可能仅仅是一条,或者某个范围的数据,而不是500W条

查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.


恩,这样是可以

#18


写程序,把数据分成多分,多线程同时插入。试试可否。

#1


该回复于2013-06-12 10:03:33被管理员删除

#2


插入数据时失效索引,插入完成后重建索引 500W条数据 快速插入,快速查询。

#3


表上建二级分区索引,一级分区是A,二级分区是B

#4


500W条记录,30分钟插入应该没有问题。建议你看一下插入时候的等待,为什么没完成插入操作。
对于索引,可以用1楼的方法,先失效,再生效。
还可以把索引换成nologging模式

#5


大量数据插入,考虑楼上说的使用nologging模式,减少redo日志,可以加快速度,
但必须要注意数据库归档模式,nologging在归档模式下要并行加载append的时候才有效

#6


這個方案如何?
用物化視圖,源表上沒有index,快照視圖上建立index

#7


插入数据前把索引删除。插入数据时用不写日志的方法,当然还有oracle的一些暗示的方法。数据插入完成后,在重建索引。

#8


LZ的意思是insert和select是并行的吗?

#9


1)LZ 能把大概的业务介绍一下吗?大体是该业务表主要是做什么用的?
2)能把之前insert和select的执行计划贴上来看看吗?这样有助于分析慢在哪

#10


APPEND nologging插入,然后建索引

#11


用了1楼的方法, 对500W数据 建立索引 需要5分钟左右时间。时间太长。这段时间查询会很卡。

具体情况是这样的, 平均每天的数据插入量是500W条。同时必须满足查询速度在0.2秒一下。
PS 系统 是7*24小时的。 

   

#12


楼主给的信息量太少!!!!让人有心无力

#13


mark 500W条数据 快速插入,快速查询。

#14


7*24小时,同时兼顾插入与查询。

#15


我觉得0.2秒查出这么多数据是不大可能的

#16


引用 15 楼 ccs02287 的回复:
我觉得0.2秒查出这么多数据是不大可能的


这个是可以实现的,因为他的查询要求可能仅仅是一条,或者某个范围的数据,而不是500W条

查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.

#17


引用 16 楼 ziwen00 的回复:
Quote: 引用 15 楼 ccs02287 的回复:

我觉得0.2秒查出这么多数据是不大可能的


这个是可以实现的,因为他的查询要求可能仅仅是一条,或者某个范围的数据,而不是500W条

查询要求:select b from table where A=‘xxxx’的条件, 必须0.2秒内查出数据.


恩,这样是可以

#18


写程序,把数据分成多分,多线程同时插入。试试可否。