项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

sql优化的整体思路,根据博主一些浅薄的经验已经网上的资料,总结如下:
1.选择合适的存储引擎。
2.优化sql与索引。因为一条sql引起的血案,网上的案例很多,不再多说。
3.加缓存。大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。
4.主从复制,读写分离。
5.开始尝试使用分区
6.尝试垂直拆分。根据不同的模块耦合度,将大系统大表拆成小系统小表。
7.如果还不行,特别是数据量巨大的单标,做sharding,水平切分。

按照从上到下的顺序,执行难度越来越大,成本越来越高。

以下内容来自知乎:
再说一下不同引擎的优化,myisam读的效果好,写的效率差,这和它数据存储格式,索引的指针和锁的策略有关的,它的数据是顺序存储的(innodb数据存储方式是聚簇索引),他的索引btree上的节点是一个指向数据物理位置的指针,所以查找起来很快,(innodb索引节点存的则是数据的主键,所以需要根据主键二次查找);myisam锁是表锁,只有读读之间是并发的,写写之间和读写之间(读和插入之间是可以并发的,去设置concurrent_insert参数,定期执行表优化操作,更新操作就没有办法了)是串行的,所以写起来慢,并且默认的写优先级比读优先级高,高到写操作来了后,可以马上插入到读操作前面去,如果批量写,会导致读请求饿死,所以要设置读写优先级或设置多少写操作后执行读操作的策略;myisam不要使用查询时间太长的sql,如果策略使用不当,也会导致写饿死,所以尽量去拆分查询效率低的sql,

innodb一般都是行锁,这个一般指的是sql用到索引的时候,行锁是加在索引上的,不是加在数据记录上的,如果sql没有用到索引,仍然会锁定表,mysql的读写之间是可以并发的,普通的select是不需要锁的,当查询的记录遇到锁时,用的是一致性的非锁定快照读,也就是根据数据库隔离级别策略,会去读被锁定行的快照,其它更新或加锁读语句用的是当前读,读取原始行;因为普通读与写不冲突,所以innodb不会出现读写饿死的情况,又因为在使用索引的时候用的是行锁,锁的粒度小,竞争相同锁的情况就少,就增加了并发处理,所以并发读写的效率还是很优秀的,问题在于索引查询后的根据主键的二次查找导致效率低;

ps:很奇怪,为什innodb的索引叶子节点存的是主键而不是像mysism一样存数据的物理地址指针吗?如果存的是物理地址指针不就不需要二次查找了吗,这也是我开始的疑惑,根据mysism和innodb数据存储方式的差异去想,你就会明白了,我就不费口舌了!

所以innodb为了避免二次查找可以使用索引覆盖技术,无法使用索引覆盖的,再延伸一下就是基于索引覆盖实现延迟关联;不知道什么是索引覆盖的,建议你无论如何都要弄清楚它是怎么回事!

建立索引的几大原则:
1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
3.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录
4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);
5.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可

参考文档:
1.MySQL索引原理及慢查询优化 https://tech.meituan.com/mysql-index.html
2.MySQL索引背后的数据结构及算法原理 http://blog.codinglabs.org/articles/theory-of-mysql-index.html

mysql 优化 整体思路相关推荐

  1. 网站大访问量优化整体思路

    1. 对于开发人员---合并css, 背景图片, 减少mysql查询等 2.对于运维nginx 的expires , 利用浏览器缓存等,减少查询 3. 利用cdn来相应请求 4.最终剩下的.不可避免的 ...

  2. mysql函数 优化_Mysql函数求优化解决思路

    mysql函数求优化 小弟刚开始接触Mysql数据库,需要基于Mysql数据库做报表开发,写的一个函数查询时候效率特别低下. 备注:传进来比较的参数数据量 5W条左右.请高手指教优化方法. 另外,一般 ...

  3. MySQL 优化思路与工具

    MySQL 优化思路与工具 1 优化思路 2 连接--配置优化 第一个环节是客户端连接到服务端,连接这一块有可能会出现什么样的性能问题? 有可能是服务端连接数不够导致应用程序获取不到连接.比如报了一个 ...

  4. mysql设计思想_这些Mysql基础设计思路以及优化思路我都给你总结好了

    原标题:这些Mysql基础设计思路以及优化思路我都给你总结好了 1.定长和不定长要区分开 2.不常用的列和常用的列分开存 3.增加冗余,反范式化 4.btree索引,就是用树形结构存储在磁盘上,其中操 ...

  5. SQL优化的思路及基本原则(mysql)

    SQL优化的思路:  1.优化更需要优化的sql:  2.定位优化对象的性能瓶颈:优化前需了解查询的瓶颈是IO还是CPU,可通过PROFILING很容易定位查询的瓶颈.  3.明确优化目标:  4.从 ...

  6. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  7. MySQL优化学习总结

    MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...

  8. mysql优化--博森瑞

    http://blog.itpub.net/28916011/viewspace-1758440/ 现在说一下mysql的内存和I/O方面的两个特点. 一. mysql内存特点: 1.  也有全局内存 ...

  9. mysql优化【转】

    最近听讲了博森瑞老师的mysql优化公开课,这个是我整理的笔记. 现在说一下mysql的内存和I/O方面的两个特点. 一. mysql内存特点: 1.  也有全局内存和每个session的内存(每个s ...

  10. MySQL优化器_MySQL查询优化器

    MySQL优化器 MySQL架构图 讲到MySQL,就绕不开他的架构图.MySQL是一个经典的C/S架构.服务器这边分两层:第一层是Server层,第二层是存储引擎.Server层处理主要的业务操作流 ...

最新文章

  1. ADAS感知算法观察
  2. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
  3. QT学习:基于TCP的网络聊天室程序
  4. JQuery-让Ajax变的更简单
  5. Android—MVC、MVP、MVVM
  6. 124angular1实现无限表单(仅供自己看)
  7. python画画bup_Python中的高效Vector / Point类
  8. 论文浅尝 | 知识图谱问答中的层次类型约束主题实体识别
  9. 清除浮动塌陷的4种经典套路
  10. codeblocks printf函数打印不出来_最全C语言基本程序交互函数之输出到屏幕
  11. 如何确定oracle进程,Oracle DBWR进程的工作流程以及和其他进程的协调工作!
  12. Qualcomm 推出下一代物联网专用蜂窝技术芯片组!
  13. java MAVEN下载的代码仓库位置 mac
  14. PostgreSQL学习手册(PL/pgSQL过程语言)
  15. mac Lion 10.7系统使用笔记
  16. win7mysql卸载数据库_win7系统彻底卸载Mysql数据库的操作方法
  17. sm3 算法java_java sm3加密算法
  18. R语言基础数据分析——双因素方差分析
  19. ASPUpload文件上传组件的用法
  20. cpci检索为什么那么慢_cpci检索论文含金量高吗?

热门文章

  1. html5-微格式-时间的格式
  2. 广东省汕头大学毕业设计论文撰写规范[2006]
  3. arm的bin二进制代码分析
  4. qmail 发邮件故障
  5. mybatis pageHelper 不分页
  6. jsp页面什么时候用 .do 和 .jsp
  7. LeetCode 951. Flip Equivalent Binary Trees
  8. 利用vue-gird-layout 制作可定制桌面 (一)
  9. 前端每日实战:91# 视频演示如何用纯 CSS 创作一个行驶中的火车 loader
  10. 学生机房虚拟化之磁盘操作