来源:自学PHP网 时间:2015-04-16 10:51 作者: 阅读:次
[导读] 许多高性能的站点都用了分解连接技术,也就是把单个多表连接查询改成多个但表查询,然后在程序中合并数据,比如:select a *,b * from A a join B b on a id = b id可以替换为:select a * f...
许多高性能的站点都用了“分解连接”技术,也就是把单个多表连接查询改成多个但表查询,然后在程序中合并数据,比如: select a.*,b.* from A a join B b on a.id = b.id 可以替换为: select a.* from A; select b.* from B; 然后再把数据通过程序合并。 可能有些人认为这太浪费了,把一个查询语句变成两条查询语句或者更多的查询语句了,如果哪位猿类这样想了,那你就应该继续往下看了。 将连接查询重构为多表查询,总体有以下性能优势: 一,缓存的效率更高。许多应用程序都直接缓存了表。 二,对MyISAM表来说,每个表查询可以更有效的利用表锁,因为查询会锁住单个表较短时间,而不是把所有表长时间锁住。 三,在程序端应用连接,可以更方便的扩展数据库,把不同的表放在不同的服务器上面。 四,查询本身会更高效 五,可以减少多余的行访问。在应用程序端进行连接意味着每行数据只会访问一次,而连接从本质上来说是非正则化的,它会反复的访问同一行数据。基于同样的原因,这种重构方式可以减少网络流量和内存消耗。 那在什么时候在应用程序端进行连接效率更高呢? 一,可以缓存早期查询的大量数据 二,使用了多个MyISAM表 三,数据分布在不用的服务器上 四,对于大表,使用in()替换连接 五,一个连接引用了同一个表很多次 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com