数据库中存有大量日志数据,程序界面提供各种查询条件的查询。(譬如日期查询+日志级别查询+....)
但是数据量相当大,一执行SQL语句就会花费很长时间。
请问有何良策?或者可以从算法角度来解决。加索引,和做stored procedure都试过,但是效果不好。

解决方案 »

  1.   

    或者说这个table叫log,有上千万条记录。
    SQL语句是:
    SELECT * FROM log WHERE level=1 AND (date BETWEEN '2010-1-1' AND '2010-2-2')
      

  2.   

    水平分表
    全文检索
    NoSQL
      

  3.   

    google 一下
    oracle partition table
      

  4.   

    把(date BETWEEN '2010-1-1' AND '2010-2-2')去掉试试,效率应该高很多,如果是这条语句导致的执行速度慢,那就换成date >= '2010-1-1' and date <= '2010-2-2'
    还有办法就是加表分区,但是要注意表分区不能加在date字段上,按你的sql应该加在level上。
      

  5.   


    1)+索引是必须的l(level字段,和date字段)2)SQL 语句改为:SELECT 字段1,字段2……   FROM log WHERE level=1 AND (date BETWEEN '2010-1-1' AND '2010-2-2')3)把log表 分区4)缓存部分离线数据,页面上不可能一次就显示几千万条数据吧?
      

  6.   

    说实在,很讨厌这种问数据库问题,连用什么数据库都不说,更可恨的是表结构也没有,就是三两句话让别人来优化!日志级别就那么几种,创建普通 B-Tree 没有任何用处,可以试着创建位图索引。日期的话,由于没有结构、用的什么数据库也不知道,无能为力!
      

  7.   


    看sql语句还看不出来是mysql数据库,只能说你数据库水平一般了,要不然就是没接触过mysql
      

  8.   

    千万不要按时间做分区,宁可用level分区,分区数量少没关系,如果你有5个level,50万的总数据量,平均每个分区下就只有10W数据了,表分区跟分表是一样的,两个数据量稍小的表关联查询,绝对比一个数据量稍大的单表查询速度还慢(sql优化程度相当的情况下)