MySQL的优化

本文最后更新于2015年8月2日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

缘由:

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

参考链接:

=EOF=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2426.html

《MySQL的优化》上有5条评论

  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查询的方式。我仅仅介绍数据库背后的基本概念,以便在读完本文后你会对底层到底发生了什么有个很好的了解。

发表评论

电子邮件地址不会被公开。 必填项已用*标注