PHP数据库编程之MySQL优化策略概述(2)
用SELECT @@frofiling来查看PROFILE的开启状态。 如果未开启,用SET profiling=1来开启。 开启之后,再执行查询语句,MySQL会自动记录profile信息。 应用show profiles查看所有的sql信息,结果为 Query_ID Duration Query三列结果,分别是查询ID,用时和所用的sql语句。 我们可以使用 type常见有ALL(全部) BLOCK IO(显示IO相关开销) CPU(CPU开销) MEMORY(内存开销)等 大型存储方面优化 数据库主从复制和读写分离1、master将改变记录到二进制日志中,slave将master的二进制拷贝到它的中继日志中,重新将数据返回到它自己的数据中,达到复制主服务器数据的目的。 主从复制可以用作:数据库负载均衡、数据库备份、读写分离等功能。 2、配置主服务器master 修改my.ini/my.conf [mysqld] log-bin=mysql-bin //启用二进制日志 server-id=102 //服务器唯一ID 3、配置从服务器slave log-bin=mysql-bin //启用二进制日志 server-id=226 //服务器唯一ID 4、在主服务器上授权从服务器 5、在从服务器上使用
6、然后使用start slave命令开始进行主从复制。 不要忘记在每次修改配置后重启服务器,然后可以在主从服务器上用show master/slave status查看主/从状态。 实现数据库的读写分离要依赖MySQL的中间件,如mysql_proxy,atlas等。通过配置这些中间件来对主从服务器进行读写分离,使从服务器承担被读取的责任,从而减轻主服务器的负担。 数据库的sharding 在数据库中数据表中的数据量非常庞大的时候,无论是索引还是缓存等压力都很大,对数据库进行sharding,使之分别以多个数据库服务器或多个表存储,以减轻查询压力。 方式有垂直切分、水平切分和联合切分。 垂直切分:在数据表非常多的时候,把数据库中关系紧密(如同一模块,经常连接查询)的表切分出来分别放到不同的主从server上。 水平切分:在表不多,而表里的数据量非常大的时候,为了加快查询,可以用哈希等算法,将一个数据表分为几个,分别放到不同的服务器上,加快查询。水平切分和数据表分区的区别在于其存储介质上的不同。 联合切分:更多的情况是数据表和表中的数据量都非常大,则要进行联合切分,即同时进行垂直和水平分表,将数据库切分为一个分布式的矩阵来存储。 这些数据库的优化方式,每一种拿出来都可以写作一篇文章,可谓是博大精深,了解并记忆了这些方式,可以在有需要的时候进行有目的的选择优化,达到数据库效率的高效。 接下来我们会进一步总结一下常用的PHP数据库类扩展memcache、redis和mongodb的基本使用场景和使用方式。 更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》 希望本文所述对大家PHP程序设计有所帮助。 (编辑:ASP站长网) |