MySQL的优化


缘由:

被问到了MySQL优化的问题,但平时没有注意总结这方面的内容。所以决定开始总结这方面的知识:先从搜集资料开始,以后会根据实际操作过程中碰到的情况有针对性的对内容进行修改。

参考链接:

=EOF=

,

《 “MySQL的优化” 》 有 7 条评论

  1. 项目中常用的19条MySQL优化
    https://segmentfault.com/a/1190000012155267
    http://bbs.thankbabe.com/topic/81/%E9%A1%B9%E7%9B%AE%E4%B8%AD%E5%B8%B8%E7%94%A8%E7%9A%8419%E6%9D%A1mysql%E4%BC%98%E5%8C%96
    `
    一、EXPLAIN
    二、SQL语句中IN包含的值不应过多
    三、SELECT语句务必指明字段名称
    四、当只需要一条数据的时候,使用limit 1
    五、如果排序字段没有用到索引,就尽量少排序
    六、如果限制条件中其他字段没有索引,尽量少用or
    七、尽量用union all代替union
    八、不使用ORDER BY RAND()
    九、区分in和exists, not in和not exists
    十、使用合理的分页方式以提高分页的效率
    十一、分段查询
    十二、避免在 where 子句中对字段进行 null 值判断
    十三、不建议使用%前缀模糊查询
    十四、避免在where子句中对字段进行表达式操作
    十五、避免隐式类型转换
    十六、对于联合索引来说,要遵守最左前缀法则
    十七、必要时可以使用force index来强制查询走某个索引
    十八、注意范围查询语句
    十九、关于JOIN优化
    `

  2. 数据库从0到0.1 (一): LSM-Tree VS B-Tree
    https://blog.bcmeng.com/post/lsm-tree-vs-b-tree.html
    `
    1、最简单的数据库
    2、Index
    3、Hash Index
    4、Segment
    5、SSTables and LSM-Trees
    6、磁盘简介
    7、B-Trees
    8、B-Tree VS LSM-Tree
    9、参考资料

    数据库最基本两个功能:数据的存储和数据的查询。 当我们写入数据时,数据库可以存储数据;当我们需要访问数据时,数据库可以给我们想要的数据。 数据库会通过特定的数据模型和数据结构存储数据,并支持通过特定的查询语言访问数据。
    本文将从最简单的数据库开始,讨论数据库如何存储数据,如何查询数据。
    本文将讨论两种存储引擎:log-structured 存储引擎和以B+树为代表的 page-oriented存储引擎。
    `

  3. MySQL InnoDB引擎锁的总结
    https://mp.weixin.qq.com/s/D50ledyMfn84u06RNiQSmw
    `
    为什么要锁
    锁的种类
      按使用方式
        乐观锁
        悲观锁
      按粒度
        表级锁
        行级锁
        页级锁
    InnoDB中加锁
      为MySQL加锁
      查看锁情况
      InnoDB什么时候会锁表

    总结:
    悲观锁与乐观锁是一种思想,而不是数据库锁机制的实现;
    InnoDB的行销是基于索引实现的,如果不通过索引访问数据,InnoDB会使用表锁;
    虽然根据标准InnoDB的默认事务隔离级别RR是存在幻读,但是通过间隙锁以及MVCC解决了幻读的问题;
    间隙锁的存在会导致并发插入问题,尽量减少范围查询;
    InnoDB的索引设计非常重要。
    `

  4. 如果有人问你数据库的原理,叫他看这篇文章
    http://blog.jobbole.com/100349/
    http://coding-geek.com/how-databases-work/
    `
    虽然本文标题很明确,但我的目的并不是讲如何使用数据库。因此,你应该已经掌握怎么写一个简单的 join query(联接查询)和CRUD操作(创建读取更新删除),否则你可能无法理解本文。这是唯一需要你了解的,其他的由我来讲解。

    我会从一些计算机科学方面的知识谈起,比如时间复杂度。我知道有些人讨厌这个概念,但是没有它你就不能理解数据库内部的巧妙之处。由于这是个很大的话题,我将集中探讨我认为必要的内容:数据库处理SQL查询的方式。我仅仅介绍数据库背后的基本概念,以便在读完本文后你会对底层到底发生了什么有个很好的了解。
    `

  5. 一本彻底搞懂MySQL索引优化EXPLAIN百科全书
    https://mp.weixin.qq.com/s/rem7Ds_QSnyhlrtNPByQcg
    `
    # EXPLAIN 输出计划参数详解
    1、id 列
    2、select_type 列
    3、table 列
    4、type 列
    5、possible_keys 列
    6、key 列
    7、key_len 列
    8、ref 列
    9、rows 列
    10、filtered 列
    11、Extra 列

    # 数据库索引最佳实践
    1、全值匹配
    2、最佳左前缀法则
    3、索引列上避免做计算操作
    4、范围条件右边的列无法使用索引
    5、尽量使用覆盖索引
    6、范围条件查找能够命中索引
    7、IS NOT NULL 无法使用索引
    8、模糊条件查询以通配符开头索引失效
    9、字符串类型不加单引号索引失效
    10、OR使用多数情况下索引会失效
    11、负向查询条件不能使用索引
    12、排序对索引的影响
    13、局部索引的使用

    # 不宜建索引的几点小总结
    1)更新非常频繁字段不宜建索引
    2)区分度不大的字段不宜建索引
    3)业务中有唯一特性的字段,建议建成唯一索引
    4)多表关联时,要确保关联字段上必须有索引
    5)创建索引时避免建立错误的认识
    索引越多越好,认为一个查询就需要建一个索引。
    宁缺勿滥,认为索引会消耗空间、严重拖慢更新和新增速度。
    抵制唯一索引,认为业务的唯一性一律需要在应用层通过“先查后插”方式解决。
    过早优化,在不了解系统的情况下就开始优化。
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注