sql 查询逻辑简单 表数据量大 怎样优化?

结构根本就查不出来,直接崩溃.但是sql结构很简单,想不出来还有什么优化办法了.如下:SELECT/*+all_rows*/ed.TRANS_DT,ed.TYPE_ID_... 结构根本就查不出来,直接崩溃.
但是sql结构很简单, 想不出来还有什么优化办法了.如下:
SELECT /*+ all_rows */
ed.TRANS_DT ,
ed.TYPE_ID_USG ,
ed.num_records,
ed.second_units
FROM product_detail ed,
Category ca
WHERE ed.Category_id = ca.Category_id
AND ed.TYPE_ID in (1400, 1410, 1420)
and ca.depart_id _type= 501
and ed.STATUS = 3
and ed.creat_dt BETWEEN
to_date('01-Jan-2009 00:00:00 ', 'dd-mon-yyyy hh24:mi:ss') and
to_date('31-Jan-2009 00:00:00', 'dd-mon-yyyy hh24:mi:ss')

表product_detail有2亿条数据,在Category_id有索引.
表Category有450万条数据,在Category_id,Category_id_value,depart_id _type上有组合索引.
谢谢楼下详细的解答, 我们用的Oracle数据库.只能做后台的查询,对数据库不能修改.
对于在product_detail.creat_dt上建立索引,表product_detail每天都在插入大量数据.所以再建立索引,对插入数据好像影响大.
展开
 我来答
阳光上的桥
推荐于2016-06-12 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65789
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
首先,你这个数据确实太多了,应该考虑使用高速磁盘阵列,甚至考虑小型机,以及专业的数据库系统。

其次,如果你的数据库变化不大,可以考虑增加索引,特别是在product_detail.creat_dt 这样的数据分散字段上建立索引,能明显提高效率。如果经常都有更新,索引就不宜过多,否则插入一条数据会非常慢。

如果你的应用非常复杂,数据在大量更新,又需要快速查询,有一些用空间换时间的办法,比如把数据库按照一定规则分在不同的服务器上,查询的时候先对条件进行判断,再提交给不同的服务器进行查询。数据库分片的方法许多,例如你可以按照时间,把每一天的数据存放在不同服务器里面,程序判断条件之后,调用对应的服务器进行查询。

空间换时间有一个典型的办法,就是把两个表合并起来,查询的时候就无需关联。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式