MySql-优化【一】

前言

     mysql两大常用存储引擎  MyISAM、InnoDB,其中MyISAM 不支持事务 表锁,不能很好地支持高并发;InnoDB为 MySql5.5之后的默认存储引擎 支持行锁 事务,支持高并发。以下是对学习mysql的笔记

【优化口诀】

全局匹配我最爱,最左前缀要遵守

带头大哥不能死,中间兄弟不能断

索引列上少计算,范围之后全失效

like百分写最右,覆盖索引不写星

不等空值还有 or,索引失效要少用

var 引用不可丢, sql高级也不难

  • 性能下降SQL慢 执行时间长 等待时间长原因  
  1.      查询语句写的烂
  2.      索引失效;一般为单值索引、复合索引
  3.      关联查询太多join
  4.     服务器调优及各个参数配置(线程数 缓冲)
  • 一般SQL语句执行顺序

 

  • 索引优化分析

            是什么?索引是帮助MySql高效获取数据的数据结构。可以得到索引得本质:索引是数据结构。"排好序的快速查找数据结构"。索引本身也很大,不可能存储内存中,索引往往以索引文件的形式存储的磁盘上。索引一般指B树(多路搜索树)。

            优势:提高数据检索的效率,降低数据库的IO成本,降低数据排序的成本,降低了CPU的消耗  。

            劣势:索引占用一定的物理空间,对于insert  update会引起索引变化。

            mysql索引分类:单值索引(即一个索引只包含单个列,一个表可以有多个单列索引)

                                        唯一索引(索引 列的值必须是唯一的,但允许有空值)

                                         复合索引(即一个索引可以包含多个列) 

             哪些情况下需要创建索引?

                  主键自动建立唯一索引

                  频繁作为查询条件的字段应该创建索引

                  查询中与其它表关联字段,外键关系建立索引

                  频繁更新的字段不适合创建索引-因为每次更新不单单是更新了记录还会更新索引,加重了IO的负担

                  where条件 里用不到的字段不创建索引

                  查询中排序的字段,排序字段若通过索引去访问 将大大提高排序速度

   哪些情况不需要创建索引?

                  标记录太少

                  经常增删改的表(提高查询速度,同时却会降低更新表的速度,如对表进行insert  update  delete因为更新表时mysql要保存数据,还要保存一下索引文件)

   explain分析

是什么?(查看执行计划)使用explain关键性可以模拟优化器执行sql查询语句,从而知道mysql是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈
能干什么?表的读取顺序、数据读取操作的操作类型、哪些索引可以使用、哪些索引被实际使用、表之间的引用、每张表有多少行被优化器查询
怎么玩?

explain+SQL语句

执行计划包含的信息-

各种字段解释

id-- select 查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序

       id相同,执行顺序由上至下

       id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

       id相同不同 同时存在

 

select_type-- 

 

table --显示这一行的数据是关于哪张表的

 

 

 

 

 

 

** 读锁会阻塞写,但是不会阻塞读,而写锁都会阻塞读与写

   事务隔离级别详解 https://www.cnblogs.com/catmelo/p/8878961.html

  • 不可重复读的重点是修改 :同一事务,两次读取到的数据不一样。
  • 幻读的重点在于新增或者删除同样的条件 , 第 1 次和第 2 次读出来的记录数不一样
  • 脏读:强调的是第二个事务读到的不够新
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值