垂直分表技术
垂直分割指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。
1,垂直分表技术首先要注意的是数据库的设计,把一些字段较大的数据存在另外一张表。比如:文章内容。这两张表的id是一一对应的,另外他们的表名前部分是相同的,后面这一张表的结尾连一个‘_data’。方便后面的数据操作。
2,数据表设计完成以后就是数据的存储了,这里在注意的是两张表的id是一一对应的。废话不多说,直接撸代码:
1 /* 2 本实例是使用phpcms,不熟悉这个框架的朋友也没关系,可能实例化模型是用phpcms方式,其他的都是原生php知识 3 */ 4 5 /*数据的存储*/ 6 $this->case = pc_base::load_model('case_model');//实例化case模型;如thinkphp5:$case=new Case(); 7 $info=array();//用于存储普通数据 8 $content=array();//用于存储大数据 9 $info['name']=$_POST['name'];10 $info['phone']=$_POST['phone'];11 $info['email']=$_POST['email'];12 13 $id=$this->case->insert($info);//把小字段的数据存进主表当中,并且返回id;14 15 $this->case->table_name=$this->case->table_name.'_data';//把数据表设置为附表,去附表查询相关内容;16 $content['content']=$_POST['content'];17 $content['id']=$id;18 $this->case->insert($id,$content);
3,数据的读取,数据的读取关键是利用 array_merger() 方法将两个数据合并:
定义和用法
array_merge() 函数把一个或多个数组合并为一个数组。提示:您可以向函数输入一个或者多个数组。注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。注释:如果您仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。1 /*数据的读取*/2 $userid=$_GET['userid'];//获取文章id3 $data=$this->case->get_one(array('id'=>$id));//取数据;如think5: Case::get(['id'=>$id]);4 $this->case->table_name=$this->case->table_name.'_data';//把数据表设置为附表,去附表查询相关内容;5 $datas=$this->case->get_one(array('id'=>$id));//查询到附表的字段;一般为大字段。content之类的。6 $data=array_merge($data,$datas);//将两个数据合并,就得到了最终想要的数据了