我有一个表xx(cbbh,jlsj,hc,jin,wei,qxdm,usecode,isnew),里面的数据可能有上亿条,并且每天增长速度非常的大(日增长大约会是二三万条),实表中部份数据贴出如下:
id cbbh jlsj wei qxdm usecode isnew
1 ZY00085 2005-8-26 9:53:09 110.264236450195 080101 ST0007 0
2 ZY00085 2005-8-26 9:54:19 110.263732910156 080101 ST0007 0
3 ZY00085 2005-8-26 9:55:29 110.262702941895 080101 ST0007 0
4 ZY00085 2005-8-26 9:56:39 110.261848449707 080101 ST0007 0
5 ZY00085 2005-8-26 9:57:49 110.260482788086 080101 ST0007 0
6 ZY00085 2005-8-26 9:58:59 110.259353637695 080101 ST0007 0
7 ZY00085 2005-8-26 10:00:09 110.259185791016 080101 ST0007 0
8 ZY00085 2005-8-26 10:01:19 110.259597778320 080101 ST0007 1
9 ZY00002 2005-8-1 14:54:52 120.010459899902 080101 ST0007 0
10 ZY00002 2005-8-1 13:47:53 119.003585815430 080101 ST0007 0
11 ZY00002 2005-8-1 13:49:03 119.003181457520 080101 ST0007 0
12 ZY00002 2005-8-1 13:50:13 119.003463745117 080101 ST0007 0
13 ZY00002 2005-8-1 13:48:44 119.003585815430 080101 ST0007 0
14 ZY00002 2005-8-1 13:49:54 119.003181457520 080101 ST0007 0
15 ZY00002 2005-8-1 13:51:04 119.003463745117 080101 ST0007 0
16 ZY00002 2005-8-1 13:52:14 119.004318237305 080101 ST0007 1
17 ZY00003 2005-8-2 10:10:31 109.060165405273 080101 ST0002 0
18 ZY00003 2005-8-2 10:11:41 109.059730529785 080101 ST0002 0
19 ZY00003 2005-8-2 10:12:51 109.058998107910 080101 ST0002 0
20 ZY00003 2005-8-2 10:14:01 109.058135986328 080101 ST0002 0
21 ZY00003 2005-8-2 10:15:11 109.057250976563 080101 ST0002 0
22 ZY00003 2005-8-2 10:16:21 109.056182861328 080101 ST0002 0
23 ZY00003 2005-8-2 10:17:31 109.054763793945 080101 ST0002 1
24 ZY00002 2005-8-4 10:06:35 119.003585815430 080101 ST0007 0
25 ZY00002 2005-8-4 10:07:45 119.003181457520 080101 ST0007 1
26 ZY00085 2005-8-26 9:29:49 110.267150878906 101001 ST0007 0
27 ZY00085 2005-8-26 9:30:59 110.267417907715 101001 ST0007 0
28 ZY00085 2005-8-26 9:32:09 110.267700195313 101001 ST0007 0
29 ZY00085 2005-8-26 9:33:19 110.268066406250 101001 ST0007 0
问题:我在使用该表查询的时,有可能以(cbbh,qxdm,usecode,isnew)中的任意一个或多个作为查询条件(例:以isnew=1为条件或以isnew=1 and cbbh=ZY00085....),请问在这种要求下我应该建立什么样的索引,以及要建多少个索引才能最快速的找到相应的记录
我觉得在各列上分别建索引,建到别的表空间应该会有点帮组
jlsj,wei
其他列重复数据太多
减小查询时间主要还是优化语句,也许你的查询语句可以优化。
顺序,把能滤掉越多数据的条件放在后面,会先执行,这样能够提高检索速度
有索引还是会有些帮助的,你这些列上的重复值都很多,表又很大,确实不好办.
另外你若想让别人帮你优化语句,不能只列出句子,要说明这样写的原因是什么,大家看看有没有逻辑上优化的可能.
建一个旧数据的表,定期把数据导出去,减少纪录个数是增加检索速度的最好方法。
其次再想优化的问题。
对表按照时间进行分区,建立分区索引。定期转移历史数据
楼主的索引是怎么建的?现在查询时间是多少?
select *
换成
每个需要的字段
总的查询时间是多少?
把
(hy_cbdw.qxdm=101001 and hy_cbdw.usecode=ST0002 and hy_cbdw.cbbh=浙椒机506 and hy_cbdw.hc=2005-05-10
or hy_cbdw.qxdm=101001 and hy_cbdw.usecode=ST0002 and hy_cbdw.cbbh=浙椒机506 and hy_cbdw.hc=2005-08-02_14
or hy_cbdw.cbbh is null )
分开,查询其中一个条件时间会少多少?
估计优化的可能性不太大。