现在有个需求,要记录发送短信记录,字段主要有:ID(自增)、APPID(对应各应用ID,对应各个应用:报告审批、日程提醒、收款提醒等)、SenderType(发送类别ID,对应类别:系统发送0、用户发送1)、ReceiverType(接收类别ID,对应类别:系统用户接收0、用户联系人接收1、客户接收2、其他直接手机号码接收)、SenderNO(如果是系统用户发送则存储对应用户工号,如果是系统发送则为0)、SenderMobile(发送手机号码)、ReceiverNO(如果是用户则为该用户工号,如果是用户个人联系人则为联系人ID,如果是客户则对应客户ID,如果是其他手机号码接收则为0)、ReceiverMobile(接收手机号码)、Message(短信内容)、Datetime(发生时间),数据库大概是这样设计的,或许不够合理,目的是在查询时:关键字可能性为(短信内容、发送手机号码、发送人姓名、接收手机号码、接收人姓名),如何实现高效查询,这里不能建立试图:SenderNO/ReceiverNO关联因素不确定,那么该怎么通过该值对应的相应的表查询相应的内容?首先不可能把所有记录对应的关联缓存下来再进行关键字检索,效率绝对低下!如果数据库设计不合理如何改进能满足需求?如果把上述字段分拆到几个表如:短信信息表(ID、Message、Datetime)、系统发送用户表(ID、UserNO、MsgID[对应短信表])、用户发送用户表(ID、SenderNO、ReceiverNO、msgID[对应短信表])、用户发送联系人表(ID、SerderNO、ContactID、MsgID)、用户发送客户表(ID、SerderNO、CustomerID、MsgID)、用户发送手机号码表(ID、SerderNO、Mobile、MsgID)、如果这样数据库的话就相对规范,可是如果进行查询如何一起查询相应的关联表呢?主要涉及到短信数据两会越来越大,一年下来应该达到千万级别,如果分表或者分库设计,MSSQL该如何进行查询?请高手指点思路,最好能提供参考代码或者范例!感谢万分!!!

解决方案 »

  1.   

    。。缩进一下文本吧,,看其好难受,把你的业务情况,目前表结构,希望查询的结果集列出来吧,我看晕了都没懂然后你只要数据类型合适,适当的索引,1000W,MSSQL是跑起没有问题的。
    数据量大,就每个月建立一个表
      

  2.   

    重新编辑了一下排版,不好意思啊,上面确实看着有些不舒服!现在有个需求,要记录发送短信记录,字段主要有:ID(自增)、
    APPID(对应各应用ID,对应各个应用:报告审批、日程提醒、收款提醒等)、
    SenderType(发送类别ID,对应类别:系统发送0、用户发送1)、
    ReceiverType(接收类别ID,对应类别:系统用户接收0、用户联系人接收1、客户接收2、其他直接手机号码接收)、
    SenderNO(如果是系统用户发送则存储对应用户工号,如果是系统发送则为0)、
    SenderMobile(发送手机号码)、
    ReceiverNO(如果是用户则为该用户工号,如果是用户个人联系人则为联系人ID,如果是客户则对应客户ID,如果是其他手机号码接收则为0)、
    ReceiverMobile(接收手机号码)、
    Message(短信内容)、
    Datetime(发生时间),数据库大概是这样设计的,或许不够合理,目的是在查询时:关键字可能性为(短信内容、发送手机号码、发送人姓名、接收手机号码、接收人姓名),如何实现高效查询,这里不能建立试图:SenderNO/ReceiverNO关联因素不确定,那么该怎么通过该值对应的相应的表查询相应的内容?首先不可能把所有记录对应的关联缓存下来再进行关键字检索,效率绝对低下!如果数据库设计不合理如何改进能满足需求?如果把上述字段分拆到几个表如:短信信息表(ID、Message、Datetime)、
    系统发送用户表(ID、UserNO、MsgID[对应短信表])、
    用户发送用户表(ID、SenderNO、ReceiverNO、msgID[对应短信表])、
    用户发送联系人表(ID、SerderNO、ContactID、MsgID)、
    用户发送客户表(ID、SerderNO、CustomerID、MsgID)、
    用户发送手机号码表(ID、SerderNO、Mobile、MsgID)、如果这样数据库的话就相对规范,可是如果进行查询如何一起查询相应的关联表呢?主要涉及到短信数据两会越来越大,一年下来应该达到千万级别,如果分表或者分库设计,MSSQL该如何进行查询?请高手指点思路,最好能提供参考代码或者范例!感谢万分!!!