有几个字段,比如:id name description date
两种存储方式:
方式一、一个表四个字段 每个字段存一个值
方式二、一个表两个字段,第一个字段存ID,第二个字段存数组,存数据的时候,把name description date的值组成一个数组,然后序列化保存。取的时候,再反序列化高手评评这两种方式的优劣,哪个效率比较高。谢谢
两种存储方式:
方式一、一个表四个字段 每个字段存一个值
方式二、一个表两个字段,第一个字段存ID,第二个字段存数组,存数据的时候,把name description date的值组成一个数组,然后序列化保存。取的时候,再反序列化高手评评这两种方式的优劣,哪个效率比较高。谢谢
解决方案 »
- 请教,cakephp组件调用模型操作数据库~~
- 网站十几个静态页面+ajax调用数据怎么样?
- 通用php分页类
- php如何定义结构体
- 如何上传超过2M的文件?
- 请教:如何把文章内容部份的关键字自动加上链接
- PHP 中 mail 函数的使用
- mysql版本冲突的问题
- 这里的js:document.thisform.act.value=1和js:document.thisform.act.value=0是什么意思啊
- 请问在php中怎样取得浏览网页用户的操作系统,谢谢,我是刚学php的新手...
- 如何使用php以root权限执行redhat5中的service network restart命令
- mysql 生成查询结果数组的问题
第二个可用于,在保存内容不固定,有的有name \有的无name有qestion等,可通过xml格式保存,再通过xml处理
方式一是一般的做法,比较适用于name description date 这些字段的查询.
方式二是特别的做法.优点是,利于对信息的控制. 缺点是如果更新其中任何一个字段要重新构造数组,不利于查询.如果不怕数据冗余,可以两者结合起来.
用起来超爽.所以说,没有最好的方法,只有最合适的方法.
如果使用第一种方式,数据条数肯定比第二种多。查询、修改时速度就比较慢。
第二种,虽然构造数组复杂,但存取的时候,数据量相对较少,速度较快。另一方面,序列化反序列化是在PHP里完成的,把数据库的压力转移到的PHP上。第二种的扩展性还好,如果增加字段,根本不需要修改数据库设计。
第二种存额外设置信息,这个是可扩展的,比如存一个json串
{
user_father:'他爹的名字',
user_mother:'他娘的名字'
}
如果现在要扩充存储这个用户他姐的名字,只需要在view页面,加多一行表单即可,方便扩展
<!--原来的表单-->
<input type='text' name='setting[user_father]' value='爹'/>
<input type='text' name='setting[user_mother]' value='娘'/>
<!--扩展的表单-->
<input type='text' name='setting[user_sister]' value='姐姐'/>后台处理,碰到setting数组的input,就整合成新的json串丢同一个字段里。很多cms都这么用的,扩展很方便。
这是错误的,数据条数并没有改变。
如果加上索引,将极大的提高查询速度这也是错误的,序列化后的字符总量肯定要大于原始数据这个还差不多对于保存序列化数据的字段的查询,只能用 like 方式,效率肯定是要打折扣的
其实还有第三种模式,就是直接在业务端配置字段信息,
就是项目本身整合上一套简易版的phpmyadmin, 可对各模块增添额外配置,表本身可增添字段,设置索引,字段可绑定特定表单(比如text,date,select..),字段对应的多语言变量。。等等一系列设置,简单来说就是把数据库表字段扩展的问题尽量移植到业务端来。