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

    逆范式:1对多的时候应当尽可能的把冗余放在一那边
    
    #查看语句的执行次数
    show status 
    
    show create database;
    
    #设置id自动增长的值
    alter table test auto_increment=2;
    
    #mysql myisam 引擎删除的记录不是释放硬盘空间
    optimize table table_name;
    
    关心以com开头的命令 show status like 'com%'
    
    show (session) status like 'com_select';  //本次会话
    
    show global status like 'com_select';  //从启动到现在
    
    connextions 试图连接数据库的次数   status like 'com_select';
    
    show status like 'uptime';  服务器启动时间
    
    show status like 'slow_queries';  //慢查询次数,默认是十秒
    
    显示慢查询 show variables like 'long_query_time';设置
    
    关于mysql中的 dual 表可以看错是一个虚拟表,只是为符合 select * from table_name 这一查询格式而已
    
    启动慢查询日志:
    mysqld.exe -slow-query-log
    
    数据文件my.ini datadir设置
    
    //设置慢查询时间
    set long_query_time = 1;
    __________________________________________________
    第一步:修改my.ini(mysql配置文件)
      在my.ini中加上下面两句话
      log-slow-queries = D:wampmysql_slow_query.log
      long_query_time=5
      第一句使用来定义慢查询日志的路径(因为是windows,所以不牵涉权限问题)
      第二句使用来定义查过多少秒的查询算是慢查询,我这里定义的是5秒
      第二步:查看关于慢查询的状态
      执行如下SQL语句来查看mysql慢查询的状态
      show variables like '%slow%';
      执行结果会把是否开启慢查询、慢查询的秒数、慢查询日志等信息打印在屏幕上。
      第三步:执行一次慢查询操作
      
      下语句代替:
      SELECT SLEEP(10);
      第四步:查看慢查询的数量
      通过如下sql语句,来查看一共执行过几次慢查询:
      show global status like '%slow%';
    
    explain:分析会不会用到索引,但不能分析出用多少时间
    
    导入大量数据时:
    alter table table_name     disable keys;
    loading data;
    alter table table_name     enable keys;
    
    查看见表SQL:
    show create table table_name;
    
    对于 myisam数据库,需要定时清理
    
    optimize table 表名
    
    用连接代替子查询
    使用join,mysql不需要在内存中国年创建临时表
    
    如果想要 or 用到索引则,or的条件必须都加索引
    
    
    在精度要求较高的项目中,用定点数来来保存,以保证准确性
    全部用 decimal 更准确
    
    date 函数最多 2038 年  此时的时间戳正好为 int 有符号的最大值
    
    查看索引的使用情况
    show status like 'handler_read';
    
    handler_read_key:  高了好
    handler_read_rnd_next: 低了好
    
    
    字段的类型匹配不一致可能会用不到索引:
        字符串型字段 = 123  用不到索引
        字符串型字段 = "123"  可以用索引

    关于索引

    1,在创建一个n列的索引时,实际是创建了MySQL可利用的n个索引。
    多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。
     KEY `gb_index_FUid_FCityId_FStatus` (`FUid`,`FCityId`,`FStatus`)
    可利用多个索引:
    FUid
    (FUid, FCityId)
    (FUid,FCityId,FStatus)
    
    2,对字符串建立索引后,查询时一定要加引号,否则不能使用索引。
    
    3,mysql对于索引的顺序是有优化的
    Where FUid = xxx and FCityId = yyy
    和
    Where FCityId = yyy and FUid = xxx
    Mysql都会使用索引(FUid, FCityId)
    
    4,join on的列加索引,效果很好。
    
    5,in查询中,如果值太多,可以考虑换一种实现方式。
    
    6,对于merg表,如果有join查询,可以将merge表的join查询替换成多个子表的join查询,最后union结果。(原来搜索脚本就是这样进行优化的)。
  • 相关阅读:
    Kubernetes-一文详解ServiceAccount与RBAC权限控制
    删除无用的docker镜像与容器
    How do I write one to many query in Dapper.Net?
    c# 使用反射Reflection的Emit实现动态创建元数据及可执行文件
    IE浏览器下bootStrap form-control input输入框不显示兼容性问题
    WPF控件从一个窗口移动到另一个窗口,特别适合实时刷新的
    添加/扫描显示二维码中的换行之【另类视野】
    各浏览器官方离线版下载地址
    CentOS挂载NTFS
    System.Data.SQLite.Core for .NET 5 Core manual reference
  • 原文地址:https://www.cnblogs.com/siqi/p/3566771.html
Copyright © 2011-2022 走看看