比如说一个张中有100万条数据,其中有时间字段,(1)查找最近的1000条记录;
(2)删除某个时间段的记录.以上SQL该如何编写???
因为数据量比较大,所以考虑到性能上的问题,有什么好的办法吗?我现在想到的是:
创建时间字段的索引,然后按时间排序,再进行查找删除
实在想不出来了,请大家帮忙!有切实可行的好办法一定加分!!!

解决方案 »

  1.   

    那就不需要索引了,最好写个存储过程,循环删除并分批commit
      

  2.   

    "不良的sql往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。"
      

  3.   

    where ... like '%...%'
    可以先用select count(*)测试一下sql效率
      

  4.   

    like '%...%' 性能会很低吧,
    印像中用like时不会使用这个字段的索引,是不是真的?
      

  5.   

    我也想过,可是存储过程似乎和普通的SQL区别不大吧???
      

  6.   

    似乎是带有 =、<、<=、>、>= 等操作符的条件语句才可以直接使用索引
      

  7.   

    我也是建议写存储过程,建索引,分批commit
      

  8.   

    时间字段在数据库里面基本上跟整数一样
    因此在时间字段上做索引非常有效(1)查找最近的1000条记录;
    按时间倒排序后取前1000,数据库都有相应的分页支持 
    (2)删除某个时间段的记录. 
    不要一条一条删除,而应该一次后者分次删除。
    一次删除的意思是在WHERE子句中用 time>起始 and time<截至
    分次删除的意思是如果一次删除的记录过多,也非常慢,可能影响到数据库运行,那么分次删除,把起始到截至的时间段切成数个小段,然后分次WHERE