数据库

当前位置:首页 > 数据库 >

MySQL常见的优化方法

时间:2015-07-27        阅读:次        QQ群:182913345

        1.硬件层次的优化
        高频CPU,内存要大,磁盘转速要快,网络带宽要大。要硬件方面优化,花钱升级硬件吧。
 
        2.软件层次的优化
        (1)优化安装mysql
        一句话,只保留需要的、必须的,其他的统统丢掉。(这句话只适用于源码编译安装的情况,如果不是,请跳过)比如,字符集。如果安装全部字符集,大概有50多种吧…记不清了,大概有这么多,但是过多的字符集影响性能(虽然影响的不多,mysql查询机制中有一步是字符集检查)。源码编译安装的话可以大量减少字符集,只保留必须的和自己需要的那些。我维护的一个mysql服务器中的Mysql只有15个字符集。
        还有就是配置文件、数据目录、系统目录不要放一块。俗话说的好,鸡蛋不要放在一个篮子里,不要在一颗树上吊死…当然,这对性能没有影响,考虑的是安全性。不是生产环境的,请无视这一条。
 
        (2)内存分配优化
        在mysql中的配置文件中可以自定义多种缓存,适当的配给值可以提高mysql的整体性能。
        innodb_buffer_pool_size 这个值应该分配总内存的40-80%,总之 这个值越高越好。如果不是专属mysql服务器,那分配40%也很够用了。
        query_cache_size 这个值分配灵活性也比较大,从几MB~几百MB。它缓存查询的结果集。查询不是能频繁、查询数据不是很大量的情况,分配个几MB就够了,杀鸡焉用牛刀啊,用内存的地方实在是多。
        join_buffer_size,sort_buffer_size 一般设1MB,2MB就十分够用了。这俩值千万不要设置的太大,因为这俩缓存是分配给每个连接线程的,过多的连接线程可能导致内存不够用。
        tmp_table_size 同样不是越大越好,分配10MB差不多够用。以后有需要可以适当多分配点。临时表缓存用于存放查询时产生的临时表,如果数据量大而tmp_table_size不够用那么Mysql会将临时表存到磁盘上导致性能下降。个人经验,当你觉得tmp_table_size不够用的时候,不要随便去增加这个值,而是检查自己的SQL语句是否还可以优化。
 
        (3)复制与读写分离
        读写分离的目标是,安全、稳定、高效。访问量少、只有一台电脑的请无视这一段…
 
        3.SQL语句的优化
        a.查询时,能不用* 就不用,尽量写全字段名。
        b.索引不是越多越好,每个表控制在6个索引以内。范围where条件的情况下,索引不起作用,比如where value<100
        c.大部分情况连接效率远大于子查询,但是有例外。当你对连接查询的效率都感到不能接受的时候可以试试用子查询,虽然大部分情况下你会更失望,但总有碰到惊喜的时候不是么…
        d.多用explain 和 profile分析查询语句
        e.有时候可以1条大的SQL可以分成几个小SQL顺序执行,分了吧,速度会快很多。
        f.每隔一段时间用alter table table_name engine=innodb;优化表
        g.连接时注意:小表 join 大表的原则
        h.学会用explain 和 profile判断是什么原因使你的SQL慢。
        i.查看慢查询日志,找出执行时间长的SQL试着优化去吧

上一篇:MySQL unsigned 详解

下一篇:MySQL 数据库索引的一些要点

扫一扫,更多精彩内容推送

PHP技术分享

分享PHP技术,前端技术,数据库,SEO优化,服务器,网络安全等知识,是php程序员工作学习的好帮手!

Copyright © 2013-2015.PHP技术分享 www.php520.cn  版权所有  网站地图    PHP学习交流群

免责声明:网站内容收集于互联网,本网站不承担任何由于内容的合法性及健康性所引起的争议和法律责任。

欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。 沪ICP备15014499号-2