首先,一个表数据超过8千万条,而且还在以每5分钟5000条记录(不一定就是5000)增加中。
其次,该表有个字段有记录了时间。
再次,该表拥有80几个字段。
需求是:80几个字段中,要求查出50个字段,而且要求分页显示。根据需求写出的sql(样品语句)如下:
select *
from ((select t1.*, rownum t1rownum
from (select ddatetime,
obtid,
prediction_time,
make_time,
forecaster,
temperature,
relative_humidity,
wind_direction,
wind_speed,
pressure,
precipitation,
total_cloud_amount,
low_cloud_amount,
weather_type,
visibility,
min_temp_24,
max_temp_24,
min_hum_24,
max_hum_24,
precipitation_12,
precipitation_24,
total_cloud_12,
low_cloud_12,
weather_type_12,
wind_direction_12,
wind_speed_12
from T_SEVP_GIFT d
where 1 = 1and
to_char(d.ddatetime, 'yyyy-MM-dd hh24:mi') >= ?
and to_char(d.ddatetime, 'yyyy-MM-dd hh24:mi') <= ?) t1
where rownum <= ?))
where t1rownum >= ?
从点击到结果显示到页面总共用时511.969s,相当的慢。
该表建有索引,就是日期字段的索引。按理来说,不应该慢的啊,
经过高人指点,后来得知,使用to_char()引擎放弃使索引,511.969s也就是这么来的。但问题来了,为什么to_char()会使引擎放弃使用索引呢?
结合创建索引的最适规则,二叉查找树查找节点的算法以及适用二叉查找树的最适规则,类型匹配等等,就很容易想清楚了,to_char()函数会使数据类型丢失,索引自然就不能用了。
把to_char()改为to_date(),就能够使用索引了。
改后的sql
select *
from ((select t1.*, rownum t1rownum
from (select ddatetime,
obtid,
wdidf,
wd2df,
wd2dd,
wd10df,
wd10dd,
wd3smaxdf,
wd3smaxdd,
wd3smaxtime,
wd10maxdf,
wd10maxdd,
wd10maxtime,
wd3daymax,
wf3daymax,
wd3daymaxtime,
wd10daymax,
wf10daymax,
wd10daymaxtime,
t,
maxt,
maxttime,
mint,
minttime,
daymaxt,
daymaxttime,
daymint,
dayminttime,
rh,
maxrh,
maxrhtime,
minrh,
minrhtime,
dp,
p,
maxp,
maxptime,
minp,
minptime,
hourrf,
dayrf,
rfmark1,
minrf,
wpv,
othfields,
rddatetime,
procsts
from T_OBTMIND d
where d.ddatetime >=
to_date('2011-09-01 10:35', 'yyyy-MM-dd hh24:mi')
and d.ddatetime <=
to_date('2011-09-01 10:38', 'yyyy-MM-dd hh24:mi')) t1
where rownum <= 10))
where t1rownum >= 1
--样品语句。
注意:这里只是很粗略的说了查询优化方案,具体上的优化更具实践性。比如说索引该如何建,以哪个字段建索引,索引该如何用效使用起来,索引的成本多大,该不该建等等。除了索引,还有具他办法么?
分享到:
相关推荐
我的系统为:每天新增一张表,每张表的数据量为1000万条记。一共有十个字段,有四个字段需要排序,每个字段都可能出现在查询条件中,每次查询所有的字段必须都查询出来,可以查询三天之内的数据,没有和其他表的连接...
百万数据级快速查询优化技巧,数据库快速查询所遵循的方法。
116 案例实战:千万级数据删除导致的慢查询优化实践(1).pdf
千万级数据分页查询存储过程SQLServer 有实例
针对银行大数据量(过亿)条数据的查询优化处理
Oracle 大数据量操作优化.pdf
1) 在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中 2) 对大数据量查询时,慎用list()或者iterator()返回查询结果, 3) 对于关联操作,Hibernate虽然可以表达复杂的数据关系 4) 对含有关联的PO...
NULL 博文链接:https://jiangyongyuan.iteye.com/blog/1574637
Oracle查询的优化技巧,对大数据量查询的时候可以节省不少时间。
针对大数据量操作性能降低的情况,本文提出了Oracle针对大数据量的操作优化。
行业-116 案例实战:千万级数据删除导致的慢查询优化实践(1).rar
全部都是经验积累所整理的文档,对提高查询有很大帮助
MySQL大数据量分页查询方法及其优化
java csv大数据量导出(千万级别,不会内存溢出),多线程导出 ,生产环境已经很稳定的使用着
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id ...
介绍一下海量数据库sql 优化,及书写sql 应该注意的事项。
大数据量数据整合与查询性能优化(DB2V9& AIXV5.3)v1.2 - 副本.pdf
Oracle表删除大量数据(千万)后查询变慢问题(原因分析)
在实际的任何一个系统中,查询都是必不可少的一个功能,而查询设计的好坏又影响到系统的响应时间和性能这两个关键指标,尤其是当数据量变得越来越大时,于是如何处理大数据量的查询成了每个系统架构设计时都必须面对...
大数据量高并发的数据库优化,一定对你有帮助的。