MySQL的使用及优化
前言
最近听了公司里的同事做的技术分享,然后觉得对自己还是挺有帮助的。都是一些日常需要注意的地方,我们目前在开发过程中,其实用不到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的使用及优化的更多相关文章
- [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优 ...
- MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术
逻辑查询优化包括的技术 1)子查询优化 2)视图重写 3)等价谓词重写 4)条件简化 5)外连接消除 6)嵌套连接消除 7)连接消除 8)语义优化 9)非SPJ优化 一.子查询优化 1. ...
- 101个MySQL 的调节和优化的提示
MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...
- MySQL 百万级分页优化
MySQL 百万级分页优化 http://www.jb51.net/article/31868.htm 一般刚开始学SQL的时候,会这样写 : , ; 但在数据达到百万级的时候,这样写会慢死 : , ...
- 101个MySQL的调节和优化的Tips
MySQL 是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些 ...
- mysql大内存高性能优化方案
mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看:key ...
- 开启Mysql慢查询来优化mysql
开启Mysql慢查询来优化mysql 优化sql语句是优化数据库的一个很重要的方面,那么怎么发现那些耗时耗资源的sql语句呢,开启Mysql慢查询! 1.查看是否开启慢查询,默认情况下是关闭的.你的m ...
- 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化
作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...
- 第 8 章 MySQL 数据库 Query 的优化
前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 Query 语句的优化进行相应的分析. ...
- MySQL 数据库 Query 的优化
理解MySQL的Query Optimizer MySQL Optimizer是一个专门负责优化SELECT 语句的优化器模块,它主要的功能就是通过计算分析系统中收集的各种统计信息,为客户端请求的Qu ...
随机推荐
- Python开发——17.CSS
一.CSS 1.概述 CSS(Cascading Style Sheets),层叠样式表,用来控制网页数据的表现,使网页的表现与数据内容分离. 2.引入方式 (1)行内式 <body> & ...
- Java Web程序开发链接MySQL数据库
显示错误:Access denied for user ''@'localhost' (using password: YES) 保证URL中没有空格 尝试用MySQL本地命令行登陆 显示错误:The ...
- Struts网站基于Filter的XSS漏洞修复
下面的代码只支持struts2框架中的xss漏洞 第一步,创建过滤器XssFilter : package com.ulic.ulcif.filter; import java.io.IOExcept ...
- C++ 虚函数的两个例子
1. 第一个例子是朋友告诉我Qt中的某个实现 1 #include <iostream> 2 3 // Qt中的某个实现 4 class A{ 5 public: 6 A() = defa ...
- Shader 屏幕后期特效 Shake(震屏)&Wave(波纹)
震屏效果 Shader: //////////////////////////////////////////// ///// CameraPlay - by VETASOFT 2017 ///// ...
- 初见SDN
软件定义网络(Software Defined Network, SDN ),是一种新型网络架构. SDN=OpenFlow:因为Openflow是大多数人唯一看得到的具体化的SDN的实现形式(实际上 ...
- 复习java基础
十进制转换成二进制: 方法:整除法,计数方式从右往左,二进制中非0即1.例子如下: 计数方式是从右往左进行,然后填写数字的顺序是余数优先 二进制转换成十进制: 方法:乘二法,例如二进制数字为: ...
- [转载]DevOps在传统企业的落地实践及案例分享
内容来源:2017年6月10日,优维科技高级解决方案架构师黄星玲在“DevOps&SRE 超越传统运维之道”进行<DevOps在传统企业的落地实践及案例分享>演讲分享.IT 大咖说 ...
- 《设计模式》学习&理解&总结
教程地址:http://www.runoob.com/design-pattern/design-pattern-tutorial.html 教程书籍:<Android 设计模式解析与实战> ...
- 吴恩达机器学习笔记46-K-均值算法(K-Means Algorithm)
K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组. K-均值是一个迭代算法,假设我们想要将数据聚类成n 个组,其方法为: 首先选择