把每一个数据项(字段)专门放在一张表里,合适吗,查询缓慢怎么解决

Neo3840 2016-11-29 05:00:31
因为实际业务的的数据字段经常需要修改(增加或删除)

所以我做了一个主表,就存一个唯一编号(报告编号)

file_id(int) , file_number(varchar)

然后又做了一个字段表

filed_id(int) , filed_label(varchar) , filed_value_int(int) , filed_value_varchar(varchar) , filed_type

目前我每次在我的程序中 先找到一页(15条)file记录,然后循环遍历为每一条找到其相关的filed

这种设计大家认为合理吗?。。。。。感觉查询起来比较麻烦,而且现在运行太慢了,有没有高效的查询方法

另外,如果这样设计的话,模糊搜索时怎么办?
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Neo3840 2016-12-01
  • 打赏
  • 举报
回复
多谢各位师兄指导了
Neo3840 2016-12-01
  • 打赏
  • 举报
回复
现在使用子查询来查询: SELECT *, (SELECT formdata_v_varchar FROM nys_formdata WHERE formdata_number_id=number_id AND formdata_formitem_id=13) AS d13, (SELECT formdata_v_varchar FROM nys_formdata WHERE formdata_number_id=number_id AND formdata_formitem_id=12) AS d12, (SELECT formdata_v_int FROM nys_formdata WHERE formdata_number_id=number_id AND formdata_formitem_id=43) AS d43 FROM nys_number LIMIT 60,40 感觉效率还不错,尤其是建立索引后,原来运行 13秒的 现在运行0.097 就出来了 果然棒
致命的西瓜 2016-11-30
  • 打赏
  • 举报
回复
引用 3 楼 Neo3840 的回复:
如上图,nys_number的每条数据 具有多条外键(nys_formdata表中) 那么 ,我要查nys_number的一条数据以及其所有的外键数据,就会出现 三十多条记录, 这样会不会效率太低了,有高效的查询方式吗? 创建view会更好吗?
这个结果是你想要的吗,如果是可以将nys_formdata作为主表左联nys_number,并给两个表关联的id 分别加上索引就好了
  • 打赏
  • 举报
回复
另外,表查询的时候,可以创建索引,特别是主外键上,要在外键上创建索引,加快查询速度,从你说的一般查询出30多条数据,应该是数据量非常少的,索引可以把查询时间缩短到0.000几秒的
  • 打赏
  • 举报
回复
这种表结构,虽然看上去不是很合理,但实际上我们公司也有表采用了类似的结构。 还有另一种结构,就是: id,字段名称,值 这个值都是 文本型的,不管是日期,还是Int,都会存为varchar类型。
Neo3840 2016-11-30
  • 打赏
  • 举报
回复


如上图,nys_number的每条数据 具有多条外键(nys_formdata表中)

那么 ,我要查nys_number的一条数据以及其所有的外键数据,就会出现 三十多条记录,

这样会不会效率太低了,有高效的查询方式吗? 创建view会更好吗?
致命的西瓜 2016-11-29
  • 打赏
  • 举报
回复
经常增删字段肯定是表结构设计不合理,首先考虑重构表结构,建议贴出表结构和部分sql
ACMAIN_CHM 2016-11-29
  • 打赏
  • 举报
回复
字段表 上添加索引就行了。 如果慢,则贴出具体的SQL语句和执行计划然后分析。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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