mysql 优化

1. sql 语句优化

a. 通过慢查询发现有问题的sql

        b. explain查询和分析sql的执行计划

        c. count()和max()优化

            max(col) col字段加索引
            count()  可以加个二级索引

        d. 子查询优化

                改用join语句优化

        e. group by 优化

              加索引

        f. limit 优化

              limit 1 提高查询性能 

        g. 其他优化

              避免在sql语句中使用now(),rand()函数,因为不能查询缓存,应该用变量代替

              避免select *  应该使用select 具体字段

              

2. 索引优化

       a. 选择合适的列建立索引

                经常搜索的字段, where,order by ,group by ,on,join字段,尽量使用索引

                索引字段越小越好

                离散度大的列放到联合索引前面

                      select * from payment where staff_id = 2 and customer_id = 236;

                       针对上面的查询是  index(sftaff_id, customer_id) 好?还是index(customer_id, staff_id)好?

                       因为customer_id的离散度更大,因此用后面的更合适!!

                       那么问题来了。怎么判断离散度呢,可以使用 select count(distinct customer_id), count(distinct staff_id) from 表名

                       谁的值大,说明这一些列的离散度更高!

       b. 索引优化 sql的方法

                 查找重复与冗余的索引

       c. 索引维护的方法

 

3. 数据库结构优化

      a. 选择合适的数据类型

                不要把数字设置为字符串

                尽量使用最小的数据类型

                如果可能,声明列为NOT NULL

                字符长度变化不大,用varchar

                character set 使用lant1,不使用utf-8,因为utf-8占用的空间是latin1的3倍

                使用Enum,不使用varchar

               ip地址设计为int

      b. 范式化优化

      c. 反范式优化

      d. 垂直拆分

      e. 水平拆分

      f.  选择正确的储存引擎

4. 系统配置优化

      a. 系统配置优化

      b. 配置文件优化

                --character-set:如果是单一语言使用简单的character set例如latin1。尽量少用Utf-8,utf-8占用空间较多。
                --memlock:锁定MySQL只能运行在内存中,避免swapping,但是如果内存不够时有可能出现错误。
                --max_allowed_packet:要足够大,以适应比较大的SQL查询,对性能没有太大影响,主要是避免出现packet错误。
                --max_connections:server允许的最大连接。太大的话会出现out of memory。
                --table_cache:MySQL在同一时间保持打开的table的数量。打开table开销比较大。一般设置为512。
                --query_cache_size: 用于缓存查询的内存大小。
                --datadir:mysql存放数据的根目录,和安装文件分开在不同的磁盘可以提高一点性能。

 

5. 服务器硬件优化

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值