`
BBjava
  • 浏览: 125518 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

大数据量(千万级)查询优化实践经验

阅读更多
首先,一个表数据超过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
--样品语句。


注意:这里只是很粗略的说了查询优化方案,具体上的优化更具实践性。比如说索引该如何建,以哪个字段建索引,索引该如何用效使用起来,索引的成本多大,该不该建等等。除了索引,还有具他办法么?
分享到:
评论

相关推荐

    千万级数据分页查询存储过程SQLServer

    在SQL Server中,面对千万级别的大数据量,进行有效的分页查询是数据库性能优化的重要环节。存储过程在这种场景下显得尤为重要,因为它们可以提高查询效率,减少网络传输,并且便于管理和重用代码。本文将深入探讨...

    116 案例实战:千万级数据删除导致的慢查询优化实践(1).pdf

    在处理千万级数据删除导致的慢查询优化问题中,首先需要了解的是,慢查询并不一定是因为SQL语句本身的问题,很多时候可能是由于MySQL服务器的资源负载过高导致的。具体来说,磁盘IO、网络以及CPU负载过高都可能引起...

    行业-116 案例实战:千万级数据删除导致的慢查询优化实践(1).rar

    本案例实战“千万级数据删除导致的慢查询优化实践(1)”聚焦于数据库性能优化,特别是针对大规模数据删除操作引发的慢查询问题。这类问题在实际业务环境中非常常见,如数据清理、日志归档等场景,对系统的响应速度...

    MySQL 百万级分页优化(Mysql千万级快速分页)

    ### MySQL 百万级分页优化(Mysql千万级快速分页) #### 背景与挑战 在处理大规模数据集时,例如拥有数百万乃至数千万条记录的数据库表,传统的分页查询方法可能会遇到性能瓶颈。特别是使用`LIMIT`进行分页时,随着...

    plsql大数据量导出工具

    在Oracle数据库环境中,处理大数据量的表数据导出是一项挑战,特别是当数据达到百万或千万级别时。"plsql大数据量导出工具"是专为解决这类问题而设计的工具,它能有效地从Oracle数据库中导出大规模数据,并将其保存...

    七天搞定SQL2005千万级别数据记录+数据库优化经验+代码优化+索引优化

    《SQL Server 2005优化千万级别数据记录与索引优化实践》 在数据库管理领域,处理千万级别的数据记录是一项挑战,尤其是在SQL Server 2005这样的环境中。本文将分享一位开发者针对SqlSever2005一千万条以上记录的...

    30个mysql千万级大数据SQL查询优化技巧详解

    MySQL在处理大数据量时,查询优化至关重要,尤其是对于拥有千万级数据的表。以下是对文章内容的详细解读和扩展: 1. **建立索引**:为`WHERE`和`ORDER BY`涉及的列创建索引可以显著提升查询速度,避免全表扫描。 2...

    2023年SQL语句千万万数据量优化方案-架构与开发

    SQL(Structured Query Language)是数据库管理和查询的核心工具,尤其在面对千万级别的数据量时,高效的SQL语句优化显得至关重要。本资料包“2023年SQL语句千万万数据量优化方案-架构与开发”旨在提供一套全面的...

    109 案例实战:千万级用户场景下的运营系统SQL调优(1).pdf

    通过以上措施,我们能有效地提升千万级数据量下运营系统SQL的查询效率。优化策略的选择需要根据实际情况进行调整,以达到最佳效果。随着数据量的增加,系统架构和策略也需要不断演进,以满足日益增长的业务需求。

    海量数据的优化经验与技巧

    在本文中,我们将探讨针对千万级数据的优化策略,特别是在MS SQL SERVER数据库环境下。首先,我们关注的是数据查询、分析、统计和分页等操作的效率提升。 一、索引优化 索引是提高查询速度的关键。在TGongwen表中,...

    MySQL 快速删除大量数据(千万级别)的几种实践方案详解

    笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要...后经过研究,最终实现了飞一般(1秒左右)的速度删除770多万条数据,单张表总数据量在4600万上下,优化过程

    mysql 千万数据表 t_order.zip

    在大数据量下,索引是提升查询速度的关键。为经常用于查询的字段建立索引,例如,如果常常按用户ID或订单时间进行筛选,那么user_id和order_time字段就应创建索引。然而,过多的索引会影响写操作性能,因此需平衡...

    人工智能-项目实践-数据预处理-多线程(线程数可调节),处理千万级mysql数据表,预处理+数据迁移到新表

    在千万级数据量的场景下,高效地读取、操作和迁移数据是一项挑战。多线程技术可以有效地并行处理数据,显著提升处理速度。 “多线程”是并发编程的一种方法,通过创建多个执行线程,可以同时执行多个任务,充分利用...

    Go语言构建千万级在线的高并发消息推送系统实践

    在构建一个能承载千万级在线用户的高并发消息推送系统时,选择合适的技术栈至关重要。Go语言,由于其在并发编程、性能优化、网络通信以及开发效率方面的优势,成为实现这类系统的一个优选语言。接下来将详细介绍在...

    MySQL千万级大数据SQL查询优化知识点总结

    MySQL千万级大数据SQL查询优化知识点总结,主要关注的是如何提高查询效率,避免全表扫描,合理利用索引,以及优化SQL语句结构。以下是一些关键的优化策略: 1. **建立索引**:在经常用于`WHERE`和`ORDER BY`子句中...

    行业-109 案例实战:千万级用户场景下的运营系统SQL调优(1).rar

    在千万级数据量下,合理的索引设计可以极大地减少数据检索时间。可能需要分析查询语句,确定哪些字段适合建立索引,同时注意避免索引过多导致的写操作性能下降。 3. **数据库设计**:数据模型和数据库架构对性能有...

    Kettle生成1亿条数据导入oracle

    在这个案例中,Kettle的高效数据处理能力确保了在一亿条数据量下,仅用30分钟就完成了导入过程,这体现了其在大数据量处理上的优势。 "经测用时30分钟,比较完美的解决了out of memory问题"揭示了Kettle在处理...

Global site tag (gtag.js) - Google Analytics