几百万条数据怎么优化速度?? 3秒一个SQL语句的速度
wqrz 2013-11-20 11:00:35
要弄一个报表程序, 只查不写, 几百万数据怎么3秒内能统计出数据?(3秒左右最好 尽量不超过10秒), 每次查出来的数据不大也就1000~2000条, 不过基本都需要全表统计, 各种sum 各种group by 各种order by 各种full join。。。 服务器就一般常见的几万块机子
我现在的思路是在这些大表根据业务情况建立一些汇总表, 比如统计地区销量就: 地区,商品大类, 业务日期,销量, 金额这样, 大概就10w多条, 这样我在这10w多条记录里sum啊group by啊order by啊都比较快,10秒内基本就出来了, 不过有些纠结的是有几个报表是要统计大区里的店铺数, 商品大类里有几个款。。。 尼玛这不是很好搞了
另外就是最科学的建索引、优化查询语句了, 现在主表的主键是订单号varchar(30), 我换成int会快多少? 日期加索引, 店号加索引 , 明细表的索引就2个, 一个订单 一个款号 没设主键。 索引还有什么优化的地方?
另外一个想法是换oracle, 不知道能快多少? 如果从10秒快到8秒也没意思, 能从10秒到3秒就换。。
我的库情况是这样, 600w的表有3张, 200w的表有10来张, 30w的表有20来张, 这些都是盘点啊销售啊什么的业务表, 都是主从结构, 比如
销售主表: 订单号(varchar 30 主键), 业务日期(只有天不带小时,每天2000条), 单据类型(3,4个类型,经常会做where条件), 店铺表(distinct 1000多条)
销售明细表: 订单号(varchar 30 主键) 商品款号(distinct 8000条), 颜色(distinct 1w条, 很少统计查询到)、 尺码(distinct 20来条, 很少统计查询到)、 数量、 金额
基础数据表大概20个, 最大最常用的商品档案表8000条, 店铺表1000来条, 其他很多都是小表, 大部分基础数据表都是商品档案的扩展属性, 比如商品大类表, 商品小类表, 商品风格表等,这些都100条以下
------- 大家