首页 新闻 搜索 专区 学院

数据库不规则关联查询,高性能查询和数据库规范设计!!!

0
悬赏园豆:50 [已解决问题] 解决于 2015-03-06 23:14

现在有个需求,要记录发送短信记录,字段主要有:

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该如何进行查询?请高手指点思路,最好能提供参考代码或者范例!感谢万分!!!

鹏城浪子的主页 鹏城浪子 | 初学一级 | 园豆:17
提问于:2013-03-19 01:47
< >
分享
最佳答案
0

折了表后也是要关联的。如果觉得内容大,可以把内容分出来试试,短信的内容应也不在吧。

楼主关键字是不同类型的,可以试着分类来处理,比如查询输入的是发送号码的时间,直接条件就是 发送号= 参数;如果是内容查找,可以用另一个专门的查询来处理,不一定要几个都写成一样的。

 楼上的组合再包含就是坑,不要这样。

收获园豆:25
gw2010 | 小虾三级 |园豆:1399 | 2013-04-19 10:44
其他回答(1)
0

没这么麻烦,短信表,用户表,用户号码表,短信手机号码表(发送号码ID,接受号码ID,短信ID)

查询的时候关联起来就好了,只要不根据内容过滤效率没问题。才千万数据,一台小型机完全无压力。

不要低估数据库的能力。

收获园豆:25
luofer | 园豆:468 (菜鸟二级) | 2013-03-19 18:12

这里主要麻烦的地方是用户表关联这里,要根据相应类别关联相应的用户信息表,如果只是一个用户表的话那就很简单,直接一个试图sql语句即可。

支持(0) 反对(0) 鹏城浪子 | 园豆:17 (初学一级) | 2013-03-19 18:41

@云中岳: 

在外键关系列上加索引,常用的查询列上加上组合覆盖索引(include)查询应该没什么压力。你这数据关系算的上比较简单的了。

支持(0) 反对(0) luofer | 园豆:468 (菜鸟二级) | 2013-03-20 09:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册