前言

最近听了公司里的同事做的技术分享,然后觉得对自己还是挺有帮助的。都是一些日常需要注意的地方,我们目前在开发过程中,其实用不到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. python提示AttributeError: 'NoneType' object has no attribute 'append'【转发】

    在写python脚本时遇到AttributeError: 'NoneType' object has no attribute 'append' a=[] b=[1,2,3,4] a = a.appe ...

  2. 第44章:MongoDB-集群--Sharding(分片)--分片的片键选择

    ①片键选择的重要性 所谓片键,就是用来拆分数据的字段,通常为1-2个字段,由于片键一旦确定,并已经分片过后,基本上就不可能再修改片键了,因此初期设计和选择就非常重要了 ②片键规则 1:不可以是数组 2 ...

  3. mixer中动态Alpha通道处理案例

       本案例处理的是RGB+a,每个色彩的采样为10位位宽. 1.在Mixer IP中打开Alpha Blending Enable 和Alpha Input Stream Enable.这样在Blo ...

  4. Docker pull下来的镜像(2)

    1.通过docker pull ubuntu:12.04 命令拉取镜像,ll发现当前目录并没有什么变化. 2.切换到docker目录 [root@iZwz9fedjw2xvy6fvxfnxgZ zxy ...

  5. [转].NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别

    转至:https://segmentfault.com/a/1190000011539920 前段时日微软(Microsoft)正式发布了.NET Core 2.0,在很多开发社区中反响不错.但还是有 ...

  6. 用JavaScript制作简单的计算器

    <html > <head> <title>简单计算器</title> <style type="text/css"> ...

  7. 从NoSQL到NewSQL,谈交易型分布式数据库建设要点

    在上一篇文章<从架构特点到功能缺陷,重新认识分析型分布式数据库>中,我们完成了对不同"分布式数据库"的横向分析,本文Ivan将讲述拆解的第二部分,会结合NoSQL与Ne ...

  8. ZJOI2019二试游记

    ZJOI2019二试游记 Day -2 今天就要去被虐了!开一篇占个坑.禁赛警告 Day -1 早上zzy,下午zzq,无限懵逼... 过来的时候Sooke,memset0,老K坐我旁边,瑟瑟发抖.. ...

  9. redis主从架构,分片集群详解

    写在前面:这篇笔记有点长,如果你认真看完,收获会不少,如果你只是忘记了相关命令,请翻到末尾. redis的简单介绍: 一个提供多种数据类类型储存,整个系统都在内存中运行的, 定期通过异步的方式把数据刷 ...

  10. Android Studio 调试各种国产手机经验总结

    为何加上“国产”二字呢,因为目前测试时就国产手机存在的安装问题多,而且都很奇葩,不得不说对于开发者时很不友好的. 下面就是个人总结的针对不同的机型调试时出现的问题做的总结: 1.VIVO 手机 解决方 ...