mysql多个关联条件优化_mysql多表关联查询的优化方法

对于一个网站来说,数据库的结构至关重要。即要利于存储(入库不阻塞),又要利于查询(查询不锁表)。网站数据库优化经验是一个积累的过程。下面就对多表关联查询的优化方法,举例说明。

现在社区分享类网站很火,就拿方维购物分享网站举例说明吧。也是对二次开发方维购物分享网站的一点总结,高手可以飞过。

购物分享的关键表有:分享表、图片表、文件表、评论表、标签表、分类表等。

围绕分享的表就么多,哇,那也不少啊。当我们查看一个图片的详细信息时,就要显示以上表里的信息。显示图片所属的分类、给图片打的标签、图片的评论、有文件的话还要显示文件下载信息等。难道让我们6个表去关联查询嘛,当然不能这么多关联来查询数据,我们可以只查询一个表即可,这怎么讲?这里分享表是主表,我们可以在主表里建立一个缓存字段。比如我们叫cache_data字段,赋予它text类型,这样可以存储很长的字符串,而不至于超过字段的最大存储。

这个缓存字段怎么用呢?在新增一条分享信息后,产生分享ID。如果用户发布图片或文件的话,图片信息入图片表,文件信息入文件表,然后把新产生的图片或文件信息写入到缓存字段里。同样的,如果用户有选择分类、打了标签的话,也把相应的信息写入到缓存字段里。对于评论而言,没有必要把全部评论存到缓存字段里,因为你不知道他有多少条记录,可以把最新的10条存到缓存字段里用于显示,这样缓存字段就变成一个二维或三维数组,序列化后存储到分享表里。

array(

'img' = array(

name => '123.jpg',

url => 'http://tech.42xiu.com/123.jpg',

width => 800,

width => 600,

),

'file' = array(

name => 'abc.zip',

download_url => 'http://tech.42xiu.com/abc.zip',

size => 1.2Mb,

),

'category' = array(

1 => array(

id => 5,

name => PHP乐知博客

),

2 => array(

id => 6,

name => PHP技术博客

),

),

'tag' => array(

tag1

tag2

......

),

'message' => array(

1 => array(id, uid, name, content, time),

2 => array(id, uid, name, content, time),

3 => array(id, uid, name, content, time),

4 => array(id, uid, name, content, time),

),

)

//比如,上面的数组结构,序列化存入数据库。

UPDATE share SET cache_data=mysql_real_escape_string(serialize($cache_data)) WHERE id=1;

这样查询就变得简单了,只需要查询一条就行了,取到缓存字段,把其反序列化,把数组信息提取出来,然后显示到页面。如果是以前那个结构,在几十万的数据量下,估计早崩溃了。数据缓存的方法也许不是最好的,如果你有更好的方法,可以相互学习,相互讨论。

本文由PHP乐知博客提供 http://tech.42xiu.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值