设计一个监控系统,连接有多台终端,每台终端几秒钟更新一条数据,用户比较关心最新的数据(一天内的),但是他们也会经常查询历史数据,怎么设计数据库,可以使软件界面对最新数据的刷卡比较快,对历史数据的查询响应也比较快?

解决方案 »

  1.   

    1. 软件界面对最新数据的刷卡比较快
    想最快,那就得考虑使用缓存.2. 对历史数据的查询响应也比较快
    对where和关联查询的字段进行索引,可以提高查询速度
      

  2.   

    #1.触发器,个人认为不好,相当于同时两份数据,而且属于同一事务,历史表INSERT有问题时,会导致整个INSERT操作失败。
    #2.分区表,也不建议。它的优点:按分区存储数据,可以把数据放在不同的文件组(文件组可放在不同的磁盘)来提高效率;且当按分区段查询时,只查询表中的某个分区,效率高。缺点:需要想办法定时增长分区;SQL没按分区段查询时,效率可能会更低
    #3.数据量不大的话,且逻辑不复杂的情况下,建议自定义JOB,注意点:
    归档时,用DELETE from 源表 output into 历史表 这种方式写,保证是一个事务,不会丢数据; 加上TOP(N)条件,一次删除N条,停1秒,再删除,保证不会影响其它SQL;WHERE 主键 < 100 and 日期 < getdate() 这种方式,就是说,你确定下主键的大概值,再用日期过滤,走的是聚集索引,加上TOP(N),删除的比较快