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每天都在插入大量数据.所以再建立索引,对插入数据好像影响大. 展开
但是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每天都在插入大量数据.所以再建立索引,对插入数据好像影响大. 展开
1个回答
展开全部
首先,你这个数据确实太多了,应该考虑使用高速磁盘阵列,甚至考虑小型机,以及专业的数据库系统。
其次,如果你的数据库变化不大,可以考虑增加索引,特别是在product_detail.creat_dt 这样的数据分散字段上建立索引,能明显提高效率。如果经常都有更新,索引就不宜过多,否则插入一条数据会非常慢。
如果你的应用非常复杂,数据在大量更新,又需要快速查询,有一些用空间换时间的办法,比如把数据库按照一定规则分在不同的服务器上,查询的时候先对条件进行判断,再提交给不同的服务器进行查询。数据库分片的方法许多,例如你可以按照时间,把每一天的数据存放在不同服务器里面,程序判断条件之后,调用对应的服务器进行查询。
空间换时间有一个典型的办法,就是把两个表合并起来,查询的时候就无需关联。
其次,如果你的数据库变化不大,可以考虑增加索引,特别是在product_detail.creat_dt 这样的数据分散字段上建立索引,能明显提高效率。如果经常都有更新,索引就不宜过多,否则插入一条数据会非常慢。
如果你的应用非常复杂,数据在大量更新,又需要快速查询,有一些用空间换时间的办法,比如把数据库按照一定规则分在不同的服务器上,查询的时候先对条件进行判断,再提交给不同的服务器进行查询。数据库分片的方法许多,例如你可以按照时间,把每一天的数据存放在不同服务器里面,程序判断条件之后,调用对应的服务器进行查询。
空间换时间有一个典型的办法,就是把两个表合并起来,查询的时候就无需关联。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询