控制可查看信息的人员,不用in,数据结构如何设计

berg369 2012-09-24 06:03:05
客户希望发布信息时,只向某些企业用户发布,用户大概有几千个,发布时从一个树形用户列表中选择,可能会中选几个,也可能全选,或者选几百个,且没有规则,由发布者自由指定。

现在我在信息表中加了一个字段,长度很大,存放指定的用户ID,用户查询时则用in去比对,效率很低的,而且用户多了也放不开,请问这种情况数据结构如何设计及使用?
...全文
103 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
DBA_磊仔 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
客户希望发布的信息只有指定用户能够看到,我能想到的办法就是在这个信息表中加一个长varchar字段publish_user,把指定的用户ID用逗句隔开放在这里,我想当然的以为需要用in,其实并不需要,仔细分析一下:

当需要显示信息列表时,用当前用户ID模糊查询即可:
select * from info_table where publicsh_user like '%'+#user_id……
[/Quote]万万不可。。。模糊查找不能利用索引,你这个方式只会导致表扫描,每个客户都要去扫描信息表,这是我能想到的最慢的方式了
Q315054403 2012-09-25
  • 打赏
  • 举报
回复
那就每次递归找出有权限的人员喽。。几千条,再怎么折腾也不会慢
berg369 2012-09-25
  • 打赏
  • 举报
回复
客户希望发布的信息只有指定用户能够看到,我能想到的办法就是在这个信息表中加一个长varchar字段publish_user,把指定的用户ID用逗句隔开放在这里,我想当然的以为需要用in,其实并不需要,仔细分析一下:

当需要显示信息列表时,用当前用户ID模糊查询即可:
select * from info_table where publicsh_user like '%'+#user_id #+'%

这种方式性能应该高于2楼加关联表的方式。
mohong_lin 2012-09-24
  • 打赏
  • 举报
回复
你的问题表达不是很清楚,能再详细说明你的需求吗
专注or全面 2012-09-24
  • 打赏
  • 举报
回复
不过楼主你的办法效率低,几千条()用户数据,不知道楼主测试了没有,真的“效率低”

一定的数据范围内,看上去效率低的做法,未必,不要把数据想象的那么弱

一切以测试结果说话
专注or全面 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

SQL code
新增一个表C,包含 信息表ID,用户ID,添加用户时就往表里插数据
select b.* from 用户表 a, 信息表 b, 表C
where a.ID = c.用户ID and b.ID = c.信息表ID
and a.ID = 某某用户
[/Quote]

不错的办法
DBA_磊仔 2012-09-24
  • 打赏
  • 举报
回复
新增一个表C,包含 信息表ID,用户ID,添加用户时就往表里插数据
select b.* from 用户表 a, 信息表 b, 表C
where a.ID = c.用户ID and b.ID = c.信息表ID
and a.ID = 某某用户
發糞塗牆 2012-09-24
  • 打赏
  • 举报
回复
那试一下使用表关联来筛选数据。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧