mysql分解连接的总结(来自于高性能MySQL以及自己网站性能优化)
2014-05-12 09:46
866 查看
许多高性能的站点都用了“分解连接”技术,也就是把单个多表连接查询改成多个但表查询,然后在程序中合并数据,比如:
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()替换连接
五,一个连接引用了同一个表很多次
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()替换连接
五,一个连接引用了同一个表很多次
相关文章推荐
- Mysql学习总结(38)——21条MySql性能优化经验
- 大流量网站性能优化:一步一步打造一个适合自己的BigRender插件(转)
- 世界顶级Web性能专家带你优化出高性能网站
- 高性能网站性能优化
- MySQL性能优化总结
- MySQL的SQL执行性能分析以及性能优化策略和步骤
- 来自Yahoo!的网站前端性能优化建议
- MySQL 性能优化总结
- 高性能网站性能优化
- 高性能Mysql学习笔记-查询性能优化
- MySQL性能优化总结
- MySQL大数据的优化以及分解存储
- 高性能MySQL笔记 第6章 查询性能优化
- mysql配置以及性能优化(转)
- 网站性能优化之GZIP压缩功能优缺点以及配置方法
- JVM虚拟机调优过程总结--来自java程序性能优化一书
- 如何putty安装php, apache, mysql(LAMP), 连接digital ocean server, 将自己的网站po上server
- 服务端mysql性能信息以及简单优化策略
- mysql性能优化配置总结
- MySQL的优化点总结---通过计算多种状态的百分比看MySQL的性能情况