sql 执行计划:
    explain 
    
    type 索引类型性能对比(越左越高):
        system > const > eq_ref > ref > range > index > all
    
    ref:
        非唯一性索引,对于每个索引键的查询麻烦回匹配的所有行(0行或多行)
    
    range:
        检索指定范围的行,where后是范围查询(between,>,<,>=,<=),但in有时会失效。
    
    index:
        查询全部索引中的数据
    
    all:
        查询全部表中的数据
        
    system 和 const :
        结果只有一条数据的时候
    
    eq_ref: 
        结果多条,但是每一条都是唯一的
    
    ref:
        结果是多条,每条数据是0或多条

Extra:
        using filesort:性能消耗大,需要一个额外的查询
            对于单索引,排序查找是同一个字段,不会出现using filesort
            复合索引不要夸列,遵循最佳左前缀原则。
            where哪些字段就orderby那些字段
            
sql编写过程:select dinstinct ... from...join...on...where...group by ... having...order by ..limit
sql解析过程:from ... on ...join ... where...group by...having...select...dinstinct..order by...
    
exist和in 子查询
    主表数据大使用in
    子表数据大使用exist
    
    用法:
        select ...from table where exist/in (子查询)
            
    
提高order by
    1.调整buffer容量大小  max_length_for_sort_data
    2.避免select * ...
    3.复合索引 不要跨列 ,避免using filesort
    4.保证全部排序字段排序的一致性,都是升序或降序
    
    
sql慢查询日志:
    检查是否开启:show variables like '%slow_query_log%'
    
    临时开启:set global slow_query_log = 1 
    
    永久开启:
        my.cnf中
            [mysqld]下加上
                slow_query_log = 1
                slow_query_log_file = 输出日志地址
        
    慢阀值查询:show variables like '%log_query_time%'
    临时设置:set global log_query_time = 值
    永久设置:
        my.cnf中
            [mysqld]下加上
                log_query_time = 值
     
create table tablelock(
    id int(5) primary key not null auto_increment,
    name varchar(20) not null
)engine myisam;

insert into tablelock(name) values("s1");
insert into tablelock(name) values("s2");
insert into tablelock(name) values("s3");
insert into tablelock(name) values("s4");
insert into tablelock(name) values("s5");

加锁:
    lock table 表1  read/write ,  表2 read/write , .....
释放锁:
    unlock tables;

查看锁:
    show open tables;

myisam:
    在执行查询语句之前指定给表加读锁,在更新(增删改)操作时会自动给表加写锁

加读锁:
    lock table tablelock read ;
    
    1.会话0给A表加锁:
        其他会话操作:可对其他表进行读写操作。对A表可以读,写需要等待释放锁

2.当前会话给A表加读锁,则当前会话只能对A表进行读操作
    
    
加写锁:
    lock table tablelock write ;
    
    1.当前会话:当前会话能对当前表能进行任何操作(增删改查 ),但不能操作其他表。
    2.其他会话:当加锁的会话释放锁后才能对该表操作

分析表锁定:
    查看锁
    show opend tables; 1代表加锁,0代表未加锁
    
    分析表锁定的严重程度:
        show status like 'table%';
            Table_lock_immediate:可能获取到的锁
            Table_lock_waited:需要等待的锁,该值越大,说明该数据锁
            竞争越大
            
            建议:Table_lock_immediate/Table_lock_waited > 50000 ,建议采用Innodb,否则使用Myisam
            
            
Innodb:
    MySQL会自动commit,建议在研究学习是将其关闭:
        set autocommit=0;
    行锁:
        create table linelock(
            id int(5) primary key not null auto_increment,
            name varchar(20) not null
        )engine Innodb;
            
            
        insert into linelock(name) values("s1");
        insert into linelock(name) values("s2");
        insert into linelock(name) values("s3");
        insert into linelock(name) values("s4");
        insert into linelock(name) values("s5");
                    
            
        会话x对数据a进行增删改操作,其他会话必须等待会话x结束事务(commit/rollback)后才能对数据进行操作。
        
        表锁通过unlock tables或事务(commit,rollback)解锁,行锁通过事务进行解锁。
        
        行锁一次锁一行数据,不同数据互不干扰。
        
        行锁注意事项:
            1.如果没有索引,则行锁转成表锁
            
        间隙锁:
            表中存在id为1,2,3,4,7,8,9 则4,5就是间隙,MySQL会自动给间隙的数据加上锁,此锁称为间隙锁
            
        分析行锁:
            show status like '%innodb_row_lock%'
                Innodb_row_lock_current_waits:当前正在等待的锁数量
                Innodb_row_lock_time:总等待时长,系统启动到现在共等待的时间
                Innodb_row_lock_time_avg:平均等待时长,系统启动到现在平均等待的时间
                Innodb_row_lock_time_max:最长等待时间,系统启动到现在最长等待时间
                Innodb_row_lock_time_waits:等待次数,系统启动到现在等待次数
            
            
            
            
            在查询语句上加锁,只需要在sql后面加for update:
                select * from 表 where .. for update;

sql 优化笔记(不全的,暂时存盘,不建议看,关闭留言,想喷也喷不了)相关推荐

  1. SQL优化笔记分享:34条实用经验可别错过

    SQL 优化经验 1. 选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving ta ...

  2. SQL优化笔记(二)—CPU优化

    概览: 数据库性能问题故障排除 检查硬件原因 使用 PerfMon 跟踪数据库瓶颈 评估查询性能 解决数据库系统的性能问题可能是一项艰巨的任务.了解如何找到问题很重要,但是了解系统对特定请求作出特定反 ...

  3. 【2022黑马程序员】SQL优化

    [黑马程序员]SQL优化笔记 文章目录 [黑马程序员]SQL优化笔记 插入数据优化 大批量插入数据 总结 主键优化 数据组织方式 页分裂 A. 主键顺序插入效果 B. 主键乱序插入效果 页合并 索引设 ...

  4. 管好统计信息,开启SQL优化之门

    遇到执行效率低下的SQL语句,对于DBA而言无疑是家常便饭了,但如何快速优化,把它变成小菜一碟,则得看看咱们DBA+社群联合发起人卢飞的经验之谈了. 专家简介 卢飞 DBA+社群联合发起人 Oracl ...

  5. mysql sql优化_浅谈mysql中sql优化

    说到sql优化,一般有几个步骤呢,在网上看到了一篇很不错的帖子.在这分享一下吧,也是自己学习的一个过程. 一.查找慢查询 1.1.查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; ...

  6. MySQL数据库基础到进阶笔记整理包含事务、SQL优化、锁等内容

    写在前面 本文是在学习MySQL数据库时整理的笔记,可供初学者学习 是在https://dhc.pythonanywhere.com/entry/share/?key=12e4a7324f68371d ...

  7. 笔记12 SQL优化

    笔记12 性能与SQL优化 1.性能优化 复习一下什么是性能: DB/SQL 优化是业务系统性能优化的核心 2.关系数据库 MySQL 什么是关系数据库 数据库设计范式 常见关系数据库 SQL 语言 ...

  8. oracle 动态sql列转行_SQL优化笔记分享:34条实用经验可别错过!

    SQL 优化经验 1. 选择最有效率的表名顺序(只在基于规则的优化器中有效)ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving tab ...

  9. 学习笔记之-MySql高级之sql优化

    一 Mysql简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. M/SQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据 ...

最新文章

  1. 在Ubuntu 16.04.6 LTS上升级python 3.5到3.7.3实录
  2. routersploit 路由器漏洞检测及利用框架
  3. Git使用汇总之工作区、暂存区、版本库
  4. 关于 STM32G0/G4/L4 HAL_IIC HAL_I2C_Mem_Read 函数读取M24C64存储芯片遇到的问题
  5. linux nameserver导致的故障
  6. Vmware中安装Ubuntu的步骤
  7. BMP位图之8位位图(三)
  8. python大数据工程师 培训_大数据工程师学习之路
  9. 内核移植出现:Kernel panic - not syncing: No init found.
  10. 计算球的体积(信息学奥赛一本通-T1030)
  11. java基础—自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存(java集合三)
  12. 【算法】剑指 Offer 42. 连续子数组的最大和 【重刷】
  13. 移动端ios和安卓input问题
  14. AWS 开战 MongoDB!
  15. 打开Excle出现配置进度解决方法
  16. 神经网络预测模型基本原理与编程实现
  17. 微信开发者工具调试公众号网页
  18. 你会卖掉自己的网上信息吗?大数据可能根本不属于你
  19. w7计算机文件夹打开怎么设置密码,怎样设置文件夹密码 Win7系统文件夹加密步骤详解...
  20. trimmed ICP及其在PCL代码解析与使用

热门文章

  1. AcWing 1118. 分成互质组
  2. ceph rados 创建存储池 存储池对象查看
  3. C语言 continue语句
  4. Sublime Text SFTP
  5. JSP文件创建,虚拟目录访问
  6. 计算机|网页设计 |csgo的设计与实现主题
  7. wiki admin.php,天兴工作室wiki主题 兼容会员系统可设置收费 适合知识付费类网站...
  8. hdu6557 Justice(小根堆+并查集)
  9. UVA10499 The Land of Justice 的题解
  10. 关于ActiveMQ消息队列不消费的思考