zoukankan      html  css  js  c++  java
  • 05.MySQL优化

    #1.1 优化方向

    1、存储引擎的选择:INnoDB MyISAM
    2、设计数据库的设计,尽量的遵循三范式
    3、适当的建立索引
    4、查询数据的时候,注意 ... 这些
    5、使用explain检查索引命中率,分析这一条sql语句是否可优化
    6、数据量大的时候,主从分离、分库分表、垂直/水平分割
    7、尽量采用 贵的,SSD硬盘。不选择机械硬盘
    8、一个和你项目有关数据库优化的例子

    1.2 MySQL优化

    1、什么是MySQL的慢查询?
    2、如何去分析 慢查询的日志?
    3、遇到了慢查询如何解决?(最好有故事)
    4、索引的建立是越多越好?为什么不是越多越好?
    一个精彩的故事

    02.简单说明

    2.1 MySQL索引优化

    # 1、最左前缀匹配原则,上面讲到了
    # 2、主键外键一定要建索引
    # 3、对 where,on,group by,order by 中出现的列使用索引
    # 4、尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,
    # 5、为较长的字符串使用前缀索引
    
    '''
    # 6、不要过多创建索引, 权衡索引个数与DML之间关系,DML也就是插入、删除数据操作。
        这里需要权衡一个问题,建立索引的目的是为了提高查询效率的,但建立的索引过多,
        会影响插入、删除数据的速度,因为我们修改的表数据,索引也需要进行调整重建
    '''
    
    '''
    # 7、对于like查询,”%”不要放在前面。
        SELECT * FROMhoudunwangWHEREunameLIKE'后盾%' -- 走索引 
        SELECT * FROMhoudunwangWHEREunameLIKE "%后盾%" -- 不走索引
    '''
    
    '''
    # 8、查询where条件数据类型不匹配也无法使用索引 
        字符串与数字比较不使用索引; 
        CREATE TABLEa(achar(10)); 
        EXPLAIN SELECT * FROMaWHEREa="1" – 走索引 
        EXPLAIN SELECT * FROM a WHERE a=1 – 不走索引 
        正则表达式不使用索引,这应该很好理解,所以为什么在SQL中很难看到regexp关键字的原因

    #2.2 MySql分库分表

    了解内容,不作为学习重点

    1、mysql一主多从,读写分离:写主库,读从库(所有数据库的数据一样)
      数据一样的,那么当数据量太大的时候查询还是很慢
    2、分库(根据用户id分库)
      1、所有数据库的表结构一样,存储的数据完全不一样
      2、真实环境以用户id进行分库,每一个库的数据都很小,查询起来就快了
      3、无法解决问题:当一个数据库中表中量过大的时候,查询依然会慢
    4、分表(根据时间分表)
      1、当一个表中数据过大的时候,我们必须要对表拆分
      2、购物清单表中有两千万数据
    最近半年的购物数据时 一百万
    半年到一年的数据有五百万
    一年以前的数据有一千万
  • 相关阅读:
    etc/ld.so.conf的使用说明
    COM编程入门转发
    OpenCV 中的图像结构IPLImage 和 Qt中QImage之间的转换源代码
    转载Linux启动过程详解2
    Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量
    Linux下Opencv+Qt4
    OPENCV 中的图像旋转与缩放
    怎么用qt4绘制橡皮筋直线
    QT4+KDEVELOP+OPENCV配置
    Linux操作系统的头文件和库文件搜索路径
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14586690.html
Copyright © 2011-2022 走看看