美文网首页
MySQL性能优化

MySQL性能优化

作者: Liuzhoulin | 来源:发表于2020-08-09 10:46 被阅读0次

    一、数据库优化目的

        1)避免出现页面访问错误

        2)增加数据库的稳定性

        3)优化用户体验

    二、使用MySQL慢查询日志对有效率问题的SQL进行监控

        1)show variables like 'slow_query_log'(或者使用show variables like '%log%')

        2)set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log'(设置存储路径)

        3)set global log_queries_not_using_indexes=on;(记录没有使用索引的sql)

        4)set global long_query_time=1(记录大于一秒的日志存在于文件中)

    三、SQL语句优化

        1)使用关键字explain查询SQL的执行计划

        2)函数max()和count()优化方案,在其函数使用字段上添加索引。注count(*)和count(column)结果不一定相同,前者统计包含NULL值,后者则不包含。

        3)子查询优化方案,需要把子查询优化为join查询,但在优化时要注意关联键是否有一对多关系,防止数据重复。

        4)group by优化方案,需要在子查询里过滤条件,避免使用临时表和文件排序,提高效率。

        5)limit优化方案

            优化步骤一:使用有索引的列或者主键进行order by操作

            优化步骤二:记录上次返回的主键,在下次查询室使用主键过滤

    四、索引优化

        1)离散度更高的列,在建立联合索引时,放在联合索引的前面,如一张表中两个字段id,distinct值越大,则放在前面,反之则放在后面。

        2)重复及冗余索引,如主键同时也是唯一键,在建立索引时,就重复了;如主键在联合索引字段里,创建索引则冗余了。

       3)删除不用索引。

    五、表结构的优化

        1)选择合适的数据类型

            1、使用可以存下数据最小的数据类型

            2、使用简单的数据类型,int比varchar类型在MySQL处理上简单

            3、尽可能使用not null定义字段

            4、尽量少用text类型,非用不可时最好考虑分表

        2)范式化优化,如(商品名称)->(分类)->(分类描述)

        3)反范式化优化

        3)表的垂直拆分

            1、把不常用的字段单独存放到一个表中

            2、把大字段独立存放到一个表中

            3、把经常一起使用的字段放到一起

        3)表的水平拆分

            1、对customer_id进行hash/range运算,如果要拆分成五个表则使用mod(customer_id,5)取出0-4个值

            2、针对不同的hashID把数据存放到不同的表中

    五、系统配置优化

        

    相关文章

      网友评论

          本文标题:MySQL性能优化

          本文链接:https://www.haomeiwen.com/subject/jucwrktx.html