前言

最近听了公司里的同事做的技术分享,然后觉得对自己还是挺有帮助的。都是一些日常需要注意的地方,我们目前在开发过程中,其实用不到MySQL太深的内容的。只是能适用我们日常开发的知识就可以了。所以我将自己的理解和学习总结也写出来,供大家一起分享。

大体分四部分:

  • 数据库优化概述
  • 数据库表设计
  • 索引原理及优化
  • 可扩展性设计

数据库优化概述

优化金三角

做数据库优化一般是由以下几种方式:

成本和效果成反比。

服务器硬件

增强服务器的硬件方式不同的方式:例如增加磁盘配置(SSD,PCRE),增大内存,增加CPU配置等。增强服务器硬件在一定的阶段内确实可以达到不错的效果,但是并不是长久之计,如果不注重下面的三种策略,一味的增加硬件配置,会适得其反。

系统及数据库配置

随着系统硬件的不断更新迭代,数据库的配置也是不断变化的。例如以前的机械硬盘性能并不很好,所以数据库的配置并没有设置太高。当服务器普遍的都是SSD后数据库的系统配配置也是可以随之变化的。另外随着业务的变化以及数据量的增长,数据库的配置也是随着变化的。但是这部分的配置带来的效果并不太明显,和增加服务器硬件类似。

数据库表设计及规划

数据库的表在设计之初就应该考虑好了以后的规划。不然当发现数据库产生瓶颈了再去优化,成本会很高。所以也需要开发人员能通过对业务的深刻理解来对数据库做好长远的规划。

SQL及索引优化

对SQL语句以及索引的优化可以说是成本最低的了,效果也是非常显著的。

这四部分内容,总有人觉得SQL及索引优化是最重要的,但是本人觉得最重要的是数据库表设计以及规划,如果能根据业务将表设计好了,根本是不需要进行索引优化的。如果数据库没有规划好,再好的DBA给你做SQL优化,效果也是杯水车薪的。

MySQL逻辑架构

上面这幅图是MySQL的基本逻辑架构图,主要分为四层。

连接层

通过MySQL的连接地址去访问MySQL的数据库,以及对访问信息的校验。

服务层

对SQL语句的校验,以及对SQL的优化和优化策略选择,最后发送到执行器去执行SQL。还包括MySQL的查询缓存也在这一层。

引擎层

MySQL是插件式存储引擎,最终将数据存到硬盘时不同的引擎有不同的组织方式。上面列出了一些引擎,常见InnoDB,MyISAM等,只要符合MySQL的接口规范,MySQL是支持自定义的引擎。

存储系统层

这部分主要是数据存储,将数据存到磁盘,磁盘的IO读写等过程。

数据库表设计

引擎的选择

请使用InnoDB存储引擎,慎用MyISAM引擎。

上图是InnoDB引擎和MyISAM引擎的一些区别对比。

ACID事务支持:由于我们介绍这次介绍MySQL的时候是以OLTP(on-line transaction processing:联机事务处理)为主的,而非OLAP(On-Line Analytical Processing:联机分析处理),所以事务处理是很重要的,这也就是为什么强烈要求使用InnoDB引擎的一个原因。

锁粒度:MyISAM支持的锁粒度是表级锁,表级锁的意思是指当一张数据表被锁住后,其他的对这张表的操作(DML)都要等着前一个锁释放了才可以执行。所以当并发量高时用户体验是很不好的。而InnoDB引擎的行级锁,只是对表的一部分数据进行加锁,所以能很好的支持并发,降低了对同一张表的操作冲突。

外检约束:虽然InnoDB支持外键,MyISAM不支持外键。但是也不建议在日常的使用过程中用外键,因为每次操作外键时都要去检查一下外键关联的数据。

全文索引:InnoDB引擎不支持全文索引,但是MyISAM支持。但是在数据库中建立全文索引其实并不是什么好的策略,还是建议如果需要建立全文索引的时候考虑使用搜索引擎工具如:ElasticSearch,Solr等。

崩溃安全:InnoDB支持崩溃安全,MyISAM是不支持的崩溃安全的。

什么是崩溃安全呢?

举个例子

MySQL的使用及优化的更多相关文章

  1. [MySQL Reference Manual] 8 优化

    8.优化 8.优化 8.1 优化概述 8.2 优化SQL语句 8.2.1 优化SELECT语句 8.2.1.1 SELECT语句的速度 8.2.1.2 WHERE子句优化 8.2.1.3 Range优 ...

  2. MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术

    逻辑查询优化包括的技术 1)子查询优化  2)视图重写  3)等价谓词重写  4)条件简化  5)外连接消除  6)嵌套连接消除  7)连接消除  8)语义优化 9)非SPJ优化 一.子查询优化 1. ...

  3. 101个MySQL 的调节和优化的提示

    MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...

  4. MySQL 百万级分页优化

    MySQL 百万级分页优化 http://www.jb51.net/article/31868.htm 一般刚开始学SQL的时候,会这样写 : , ; 但在数据达到百万级的时候,这样写会慢死 : , ...

  5. 101个MySQL的调节和优化的Tips

    MySQL 是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些 ...

  6. mysql大内存高性能优化方案

    mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看:key ...

  7. 开启Mysql慢查询来优化mysql

    开启Mysql慢查询来优化mysql 优化sql语句是优化数据库的一个很重要的方面,那么怎么发现那些耗时耗资源的sql语句呢,开启Mysql慢查询! 1.查看是否开启慢查询,默认情况下是关闭的.你的m ...

  8. 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化

    作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...

  9. 第 8 章 MySQL 数据库 Query 的优化

      前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 Query 语句的优化进行相应的分析. ...

  10. MySQL 数据库 Query 的优化

    理解MySQL的Query Optimizer MySQL Optimizer是一个专门负责优化SELECT 语句的优化器模块,它主要的功能就是通过计算分析系统中收集的各种统计信息,为客户端请求的Qu ...

随机推荐

  1. APIView源码简单分析图

    APIView源码简单分析 !声明:下面这个dispatch分发方法不在是父类View里的dispatch了,APIView重新封装了这个dispatch.(整个核心就是initialize_requ ...

  2. Mysql相关存储函数,函数,游标

    https://www.cnblogs.com/zhanglei93/p/6437867.html >>>>请进入

  3. 解压->静态库.a文件

    1. cd /Volumes/HHD/PQS/apple/Public 2. file com_PQS.a com_PQS.a: Mach-O universal binary with 5 arch ...

  4. dialog记录

    .gyzq{ &.dialog{ background: rgba(83,83,83,0.50); width: 100%; height: 100%; position: fixed; ov ...

  5. Python 基础整理(未完)

    数据类型和变量: 整数:Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六 ...

  6. 技术干货:实时视频直播首屏耗时400ms内的优化实践

    本文由“逆流的鱼yuiop”原创分享于“何俊林”公众号,感谢作者的无私分享. 1.引言 直播行业的竞争越来越激烈,进过2018年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验.最近正好在做 ...

  7. python 77种常用的基础函数

     Python:   1. print()函数:打印字符串   2. raw_input()函数:从用户键盘捕获字符   3. len()函数:计算字符长度   4. format(12.3654,’ ...

  8. 第69节:Java中数据库的多表操作

    第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...

  9. [Postman]查找替换(5)

    在邮差中查找和替换 在Postman中快速轻松地查找和替换API项目中的文本.Postman应用程序使您能够执行全局查找和替换操作,该操作可在其各种组件(如集合,环境,全局和打开选项卡)中无缝工作.这 ...

  10. java中的全局变量如何实现?ThreadLocal~

    全局变量就是不管你在哪里,都能够直接引用的变量,还不用担心各种问题.每个语言都有自己的全局变量,我想! 一般地,面向过程的语言当中,可能就是一个声明在最前面的变量,后面的代码直接引用,就成了全局变量! ...