zoukankan      html  css  js  c++  java
  • xxtk-mysql优化

    一、慢查询
    1.慢查询是慢查询的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阀值的SQL语句的
    日志。慢查询日志默认是关闭的。
    2.常用的配置
    slow_query_log启动停止技术慢查询日志。 set GLOBAL slow_query_log=1启动
    slow_query_log_file 慢查询日志的存储路径及文件(默认和数据文件放在一起)
    long_query_time 指定记录慢查询日志SQL的执行阀值,默认10秒
    log_queries_not_using_indexes 是否记录未使用索引的SQL
    log_output日志存放的地方
    3.慢查询日志的组成
    第一行 用户名、用户的IP信息、线程ID号
    第二行 执行花费的时间 (毫秒)
    第三行 执行获得锁的时间
    第四行 获得的结果行数
    第五行 扫描的数据行数
    第六行 SQL执行的具体时间 (时间戳)
    第七行 具体的SQL语句
    4.慢查询分析工具 mysqldumpslow
    mysqldumpslow -s r -t 10 slow-mysql.log
    c 总次数
    t 总时间
    l 锁的时间
    r 总数据行
    -t top前面几条
    2)pt_query_digest 在远端也可以分析慢查询
    总的查询时间
    总的锁定时间
    总的获取数据量
    扫描的数据量
    查询大小
    5.查看索引 show index from table_name
    6.创建索引、约束的语法
    1)create table t1(
    name varchar(50) not null unique,
    );
    2)create index idx1 on t1(name);
    3)约束:
    插件的5类约束
    not null
    unique
    primary key :constraint pk_temp_id primary key(id,classId)
    foreign key
    check
    使用:
    create table t2(
    in int auto_increment not null primary key,
    name varchar(20) unique,
    age int,
    check(age>20),
    constraint fk_id foreign(id) references classes(id);
    );
    7.mysql的数据类型
    整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
    浮点数类型:FLOAT、DOUBLE、DECIMAL
    字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、
    MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
    日期类型:Date、DateTime、TimeStamp、Time、Year
    其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、
    MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
    8.锁的类型
    9.union查询
    select * from t1
    union
    select * from t2
    10.执行计划:使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL如何处理你的SQL语句
    的 。分析你这条语句或表结构的性能。
    explain+SQL语句。
    执行计划包含的信息:
    id 获取select子句的操作顺序。id相同是从上到下。id值越大优先级越高,优先级高的先执行。
    select_type 主要区别是普通查询、联合查询、子查询。
    类型Simple、primary(最外层查询)、subquery、derived、union、
    union result(从union表获得的select)
    table
    type 访问类型
    system>const>eq_ref>ref>range>index>ALL
    system 表只有一行记录
    const 通过索引一次就找到了
    eq_ref 唯一性索引扫描,对于每一个索引键只有一条记录与之匹配。唯一、主键索引
    ref 非唯一索引,返回的多行,
    range where语句中出现between、<、>、in等查询。因为它只需要开始于索引的某一点,结束于另一点。
    index 扫描整个索引文件 select id from t1
    ALL 是全表扫描,用到了一些非索引列
    possible_Key 可能使用的索引
    key 使用的索引名,如果为null说明没有使用索引。
    keytype
    key_len 显示值为索引字段的最大可能长度,并非实际使用的长度
    latin1占一个字节,gbk占2个字节,utf8占3个字节
    char 允许为null时,会多一个字节;varchar允许为空时也是占多一个字节
    varchar占用2个字节
    可以根据key_len来判断复合索引的生效情况
    ref 使用了哪个索引
    rows 扫描的行数
    extra
    using filesort 无法使用索引进行排序,使用了文件排序 order by
    using temporary 是否使用了临时表。临时表保存中间结果 order by和group by会使用。也是可以通过索引进行优化的。最左匹配原则。group by col1,col2
    using join buffer 使用了join

    当一个列有多种类型时:
    1.优先考虑数字类型
    2.其次是日期、时间类型
    3.最后是字符类型
    4.对于同级别的数据类型,应该优先选择占用空间小的数据类型。

    二、sql优化
    1.尽量全值匹配
    2.最佳左前缀法则。就像火车:由火车头、火车、火车尾等组成。火车头没了就不能开了,也就是索引失效。只是说不能丢,位置没有规定,不一定要放在第一个
    3.不要在索引列上做任何操作
    4.如果使用了范围索引查询,会导致范围查询之后的索引失效,范围索引不失效,之后的失效。
    select * from staffs where name = 'July' and age>20 and pos='manager'
    5.尽量使用覆盖索引,少用select *
    如果使用*,数据不再覆盖索引中,找到了所在的行还要去找data。如果使用覆盖索引,那么直接可以找到索引就返回数据。
    6.不等于时,如果选择的列不是覆盖索引,会导致全表扫描。
    7.null和not not的影响
    如果是not null;查询 where name is null //返回的impossible 不可能扫描
    查询 where name is not null //全表扫描 也是没有使用索引,为了使用索引可以select 覆盖索引
    如果可以为null; 查询 where name is null 使用了索引 ref
    查询 where name is not null 使用了索引 range类型
    8.like可能会导致索引失效。
    like '%abc'失效,但是如果select的列是覆盖索引,那么是不会失效的。
    like 'abc%'不失效。
    9.字符串类型加引号,
    不加使用覆盖索引也会生效
    10.or查询索引会失效,应该改成union
    select * from staffs where name='July' or name = 'z3'
    改成
    select * from staffs where name='July'
    union
    select * from staffs where name='z3'

    11.覆盖索引是万能的

    12.葵花宝典
    全值匹配我最爱,最左前缀要遵守;
    带头大哥不能死,中间兄弟不能断;
    索引列上少计算,范围之后全失效;
    LIKE百分写最右,覆盖索引不写*;
    不等空值还有OR,索引影响要注意;
    VAR引号不可丢, SQL优化有诀窍。

    create table product3 select * from product2 where 1=2;//where 1=2表示只需要表的结构,不需要表的数据。

    14.desc会导致filesort。如果去掉的话直接是索引排序

  • 相关阅读:
    js验证表单大全
    JavaScript验证表单大全
    ASP.NET(c#)操作cookie、session、cache工具类
    AIX查看硬件配置
    SAP* DDIC密码丢失如何处理
    如何学好SAP BASIS
    SAP STMS 传输系统配置
    BOM展开实例
    免安装Oracle客户端使用PL/SQL连接Oracle
    入门培训SAP操作手册 之前台操作
  • 原文地址:https://www.cnblogs.com/kltsee/p/12626381.html
Copyright © 2011-2022 走看看