zoukankan      html  css  js  c++  java
  • mysql性能优化其中一部分小结

     
    mysql性能优化
    如何发现有问题的SQL?
     
    使用MySQL慢差日志对有效率问题的SQL进行监控
     
    下面就是与慢查询相关的sql语句:
    show variables like 'show_query_log' //用这个看一下是否开启了慢查日志
    show variables like '%log%';//关于sql的所有参数
    以61数据库为例
     
    set global show_query_log_file = '/home/mysql/sql_log/mysql-slow.log' //指慢查询文件的存储位置
    set global log_queries_not_using_indexes = on; //我们是否将没有使用索引的sql记录到慢查询日志中,通常情况下对数据库优化过程中主要是优化表的索引和查询的使用方式,这样记录下来sql以备以后进行优化
    set global long_query_time =1;//超过多少秒之后的记录在慢查询日志中,大于1秒的查0.01秒一般
     
     
     
     
    慢查日志的分析工具
     
    mysqldumpslow
    pt-query-digest
     
     
     
    使用explain查询sql的执行计划
     
     
     
    type:从最好到最差
    const:表示常数查找,一般是主键或者唯一索引进行查找
    eq_reg:表示范围查找一般是主键或者唯一索引进行查找
    ref:常用于连接的查询中,在一个表中基于某个表的查找
    range:索引的范围查找
    index:索引的扫描
    ALL:表扫描
     
    注:key_len:索引的长度越小越好,因为mysql的读取都是以页为单位的,而一页中如果存取的索引越大,那他的查询效率就越高
    举几个例子
    以上这个语句可以看出是全表扫描,这样数据量特别大的时候,而且查询频率特别高的时候,那这个sqlio性能就特别的高,就会拖慢着整个服务器的io效率,就增加了服务器不稳定的因素,通常这种情况下就可以在payment_date字段上增加索引,然后再看一下执行计划
     
    select tables optimized away 意思是并不是进行实际的查询,通过索引就可以知道sql的执行结果了,因为索引是顺序排列的,通过统计最后一条数据的值是什么样子的,也就是不需要表的操作就可以直接知道,这样就优化了sql的执行效率,减少了io操作,其实这个索引就可以称为覆盖索引,意思就是通过索引信息就可以查询到语句的结果
     
     
     
    我是想差2006和2007年分别的电影熟,现在是合在一起了,所以是错误的,
    正确的写法
     
     
    说到count,通常我们用count(*) 或者 count(字段名) 这两种方式,哪这两种方式到底哪种好呢,举个例子
     
     
     
    就是count(*)是包含为null的行数
    count(id)不包括
     
    利用count的特性如果说发行年份是2006就给它计数,如果不是2006就返回null值,而这个null值在count中是不会计数的,
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    C#实现仪器的自动化控制
    .Net FrameWork常用类
    编码:隐匿在计算机软硬件背后的语言(8)--自动操作(三)
    深入理解计算机系统(4)-- 整数和浮点数
    编码:隐匿在计算机软硬件背后的语言(8)--自动操作(二)
    C#中二进制、十进制和十六进制互相转换的方法
    深入理解计算机系统(3)-- 信息存储
    mysql-5.7.17-winx64免安装版环境配置 问题小记
    python生成随机数:uniform(), randint(), gauss(), expovariate()
    深度学习翻译 效果优于各类翻译器
  • 原文地址:https://www.cnblogs.com/weiluoyan/p/8184400.html
Copyright © 2011-2022 走看看