您的位置:首页 > 大数据

大数据量建索引提高查询速度问题

2009-08-27 10:13 309 查看
       曾经做过一个项目---外汇交易管理系统。

       其中有一个报价功能,需要保存一个月的数据集,数据量差不多2千多万条,当然查询的时候,自然会造成低速率,连接超时问题,甚至会造成程序出错!如何解决这些问题呢?

      答案是创建索引和优化SQL语句!

 

      下边讲一下怎样创建索引?

       t_priceinfo------报价表,其中有两千多万条数据!

      priceid       ------相当于一个表的主键,但并不是主键!

      intime        ------报价的时间!

      以下是SQL语句
      select * from t_priceinfo   where priceid>=(select max(priceid) from t_priceinfo)-56 and priceid<=(select max (priceidfrom t_priceinfo)-28 order by intime desc 

 

     先分析一下这个SQL语句。

     这个SQL语句涉及到分页问题,暂且不管这个。

     造成查询速度慢,从SQL语句来看,无非是两个因素引起的 -----max 和 order by

     max 函数,其实从oracle中的内部机制来讲,它应该是对字段进行进行排序,然后在从排好序的数据中迅速找出最大值,这里应该涉及到有关数据结构的问题。假设你没有对该字段创建索引,那么在查询时会在一群无序的字段中找出最大值,显然是相当不容易的,自然会造成速度一慢再慢,但若是先对字段创建索引呢,显而易见,最大值的查询也就易如反掌了,速度自然居高不下。。

     order by 也是对某个字段进行排序,这显然在数据量大的时候会造成时间浪费问题,效率就不用提了,还不如直接对其创建索引,排序由oracle 内部机制来实现。

      同样一个SQL语句,在没有对priceid 和intime创建索引前,导致查询超时,程序返回不了数据,以致出错。但是创建索引后,查询速度一高再高,程序运行起来犹如翻云覆水,哈哈。。。

     总结,在遇到针对大量数据的某个字段采用聚合函数时,要考虑使用创建索引,这是提高速度的一个相当好的办法。。。嘿嘿。。。

    

    

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息