MYSQL优化

    1.使用 show status like 'Com%';可以查到各种语句执行次数。

        Com_select:执行select操作的次数。

        Com_insert:执行insert的次数

        Com_update:执行update的次数

        Com_delete:执行delete的次数

        对于事务型的应用,Com_commit和Com_rollback可以了解事务的提交和回滚。如果回滚频繁,可能应用存在问题。

        使用 show status like 'Slow%';可以查到慢查询次数。其中 Slow_queries:慢查询次数。

    2.定位执行效率较低的SQL语句

        2.1 使用——log-slow-queries[=file_name]选项启动MySQL服务,会记录超过long_query_time秒的sql日志到文件。

        2.2 查找到低效率的SQL后,通过EXPLAIN分析低效sql的执行。关键点在于type:表的连接类型,key:实际使用索引,rows:扫描行的数量。可以根据extra进行优化。

    3.索引问题

        1.mysql可以对字段的前4个字符进行索引。

        2.最左前缀:对于创建的符合索引,只要查询的条件用到了最左边的列,索引一般就会被使用。

        3.like的查询,只有%号不在第一个字符,索引才可能被用上。(假如like的条件已经含有全部搜索条件,也没有必要用索引)

    4.存在索引但不使用索引

        1.因为MySQL估计索引比全表扫描更慢

        2.用or分割开的条件,如果前面的列有索引,后面的列没有索引,那么涉及的索引都不会被用到。

        3.如果不是索引列的第一部分(最左)

        4.如果like以%开始

        5.如果列类型是字符串,不加引号

    5.优化内存空间,对数据库数磁盘碎片进行整理

        optimize table test;

        执行期间会表锁定,需要在数据库不繁忙的时候执行。

    6.优化insert语句

        1.一次插入多行,可以使用多个值表的insert语句,例如:insert into test values(1,2),(1,3);

        2.索引文件和数据文件分在不同的磁盘存放,利用建表选项。

    7.优化group by子句

        可以使用order by null避免进行排序。(避免filesort)

    8.优化子查询

        使用join代替子查询操作。

        因为join不需要在内存中创建临时表来完成这个需要2个步骤的工作。

    9.优化or条件

        对于含有OR 的查询子句,如果要利用索引,则OR 之间的每个条件列都必须用到索引;

如果没有索引,则应该考虑增加索引。

    10.使用sql提示

        使用use index提供希望mysql参考的索引,节省mysql筛选索引的时间

        例如:explain select * from test use index(ind_test) where id= 1;

        使用force index参照上面的,这个不是让mysql作为参考,而是强制使用。

    11.表结构优化

        使用PROCEDURE ANALYSE()函数确定要优化列。

        会返回字段现有数据最小值和最大值,以及最小和最大长度。最后还会给出合理的建议字段。

    12.拆表

        垂直拆表,将不常用的列放入另一个表。

        水平拆表:表数据具有独立性,如按照年进行分表。

        缺点,查询所有数据要联合操作。

    13.逆规范化

        1.增加冗余列,避免查询时的连接操作。

        2.增加派生列,避免使用函数多次计算。

        3.重新组表,如果许多用户要查看两个表连接出来的结果,可以组成一个表来减少连接。

        4.分表,拆分表

                注意:逆规范化虽然带来了速度,但也对数据完整性提出了要求,一般在应用层进行维护,但是易出疏漏,特别是需求变更时。这里不建议用触发器,对数据的任何修改触发对复制列或者派生列的相应修改。

    14.使用中间表

        数据量较大的表,统计可以创建临时使用的中间表,使用中间表可以提高统计效率,并不会对线上应用产生负面影响。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值