【高性能Mysql 】读书笔记(二)】的更多相关文章

此书不但帮助MySQL初学者提高使用技巧,更为有经验的MySQL DBA指出了开发高性能MySQL应用的途径.全书包括14章,内容覆盖MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优.系统配置管理和安全设置.监控分析,以及复制.扩展和备份/还原等主题. MySQL为名的数据库是从1994年开始开发,并与1995年第一次呈现在小范围的用户面前,开发者是两个瑞典人Widenius和David Axmark.那时MySQL还非常简陋,除了在一些表上做一些Inser.Update.Del…
第1章 MySQL架构 MySQL架构与其他数据库服务器大不相同,这使它能够适应广泛的应用.MySQL足够灵活,能适应高要求架构.例如Web应用,同时还适用于嵌入式应用.数据仓库.内容索引和分发软件.高可用的冗余系统.联机事务处理系统OLTP及很多其他应用类型. 为了充分发挥MySQL的性能,顺畅地使用它,就必须理解它的设计.MySQL的灵活性体现在很多方面,它可以再众多硬件平台上良好的配置和运行,还支持多种数据类型.不过MySQL最重要.最不同寻常的特征是它的存储引擎框架,这种架构可以讲查询处…
4.5 加快ALTER TABLE 操作的速度 原理: MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题. MySQL 执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表.这样操作可能需要花费很长时间,如果内存不足而表又很大,而且还有很多索引的情况下尤其如此 特点: 大部分ALTER TABLE 操作将导致MySQL 服务中断 ALTER TABLE 本质是建新结构的表,从旧表插入数据到新表 (SHOW STATUS 显示这个语…
全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只允许全局读操作. 全局锁的典型使用场景是做全库的逻辑备份. 不过现在使用官方自带工具 mysqldump 使用参数 --single-transaction 的时候,导出数据之前就会启动一个事务.来确保拿到一致性视图.这个应该类似于在可重复读隔离级别下启动一个一致性事务.由于 MVCC 的支持,这个…
看了非常多 MySQL 相关的书籍和文章,没有看到过如此优秀的专栏.所以未来一段时间我会梳理读完该专栏的所学所得. 当我们在执行该查询语句的时候我们在干什么 mysql> select * from T where ID=10: 让我们先来看一个架构示意图 MySQL 架构被清晰的分为了两层,服务器层 | 存储引擎层. 服务器层一般用于存放一些可以跨存储引擎执行的功能,Server 层包括连接器.查询缓存.分析器.优化器.执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日…
针对排序来说,order by 是我们使用非常频繁的关键字.结合之前我们对索引的了解再来看这篇文章会让我们深刻理解在排序的时候,是如何利用索引来达到少扫描表或者使用外部排序的. 先定义一个表辅助我们后面理解 CREATE TABLE `t` ( `id` ) NOT NULL, `city` varchar() NOT NULL, `name` varchar() NOT NULL, `age` ) NOT NULL, `addr` varchar() DEFAULT NULL, PRIMARY…
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Facade模式.Proxy模式 (3)基本方法:Extract Interface 抽取接口.Extract Class 抽取类.Extract Method 抽取方法 (4)DEMO:数据库管理系统中根据不同权限进行CRUD操作(这里是使用Proxy模式重构后的代码) public interface IDB…
构建高性能WEB站点笔记 因为是跳着看的,后面看到有提到啥epoll模型,那就补充下前面的知识. 第三章 服务器并发处理能力 3.2 CPU并发计算 进程 好处:cpu 时间的轮流使用.对CPU计算和I/O操作进行很好的重叠利用. 进程的调度有内核进行.从内核的观点看,进程的目的就是担任分配系统资源的实体.同时,进程也可以理解为记录程序实例当前运行到什么程度的一组数据.多个程序通过不同的进程描述符与这些数据进行关联. 每个进程都有自己的独立内存空间和生命周期.当子进程被父进程创建后,便将父进程地…
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Provider提供两个功能对象的创建,依赖关系的管理. 不过,IoC容器这个词中,我们还得关注容器二字.它还包含了一些别的功能,如下图 Spring提供了两种类型的容器,分别是BeanFactory与ApplicationContext. 它们的区别在于: BeanFactory:对于它所管理的bean,采取的…
开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么. 因为 WAL 技术的存在,所以当我们执行一条更新语句的时候是先写日志,后写磁盘的.当我们在内存中写入了 redolog 之后,就返回已经更新成功了.后续通过其他的手段将数据写回到磁盘上. 当内存数据也跟磁盘数据页不一致的时候,我们就称这个内存页为“脏页”.内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”. 有几种场景会让 MySQL 主动将 redo log 里面的记录刷到实际的数据更新上面. 1…
通常我们在做这个选择的时候,考虑得最多的应该是如果我们需要让 Database MySQL 来帮助我们从数据库层面过滤掉对应字段的重复数据我们会选择唯一索引,如果没有前者的需求,一般都会使用普通索引.这篇文章将会站在性能的角度来分析一下两者的区别对性能的影响. 这里还是用一张之前分析索引用到的图. 查询过程 在我们查询的时候我们使用 select id from T where k=5.这个查询语句通过查询逐渐搜索到 B+Tree 的叶子节点,然后取到对应的数据页,然后在数据页内部找到对应记录.…
这篇我觉得有点难度,我会更慢的更详细的分析一些 case . MySQL 的默认事务隔离级别和其他几个主流数据库隔离级别不同,他的事务隔离级别是 RR(REPEATABLE-READ) 其他的主流数据库比如 oracle 通常是 RC(READ-COMMITTED) 关于数据库有哪些隔离级别我这里就不详细阐述了,大概是什么特性我这里就不阐述了大家可以自行翻阅资料,让我们聚焦这两个最重要的隔离级别在一些查询更新的时候会出现什么样的特性表达. 当我们使用 RR 的时候,事务启动的时候会创建一个视图…
我记得之前博客我也写过关于索引使用的文章,但是并不全面,这次尽量针对重点铺全面一点. 因为索引是数据引擎层的结构我们只针对最常见使用的 Innodb 使用的 B+Tree 搜索树结构进行介绍. 每一个在 InnoDB 的中的索引都对应一颗 B+Tree.举个栗子: 创建这样一个表,并且在字段 k 上创建索引 mysql> create table T( id int primary key, k int not null, name varchar(16), index (k))engine=I…
前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文笔记也主要是根据阮一峰老师的<ECMAScript 6 入门>和平时的理解进行整理的,希望对你有所帮助,喜欢的就点个赞吧! 一.数组扩展 1. 扩展运算符 ①复制数组: const a1 = [1, 2]; // 写法一 const a2 = [...a1]; // 写法二 const [...a…
前段时间看了<高性能MySQL>中的选择优化的数据类型,这里主要是做一下笔记. 首先数据选择有几个简单原则: 更小的通常更好.一般情况下,应该尽量使用可以正确存储数据的最小数据类型.例如只需要存 0~200,tinyint unsigned 更好.更小的数据类型通常更快,因为它们占用更少的磁盘.内存和 CPU 缓存,并且处理时需要的 CPU 周期也更少. 简单就好.简单数据类型的操作通常需要更少的 CPU 周期.例如,整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较 比 整型…
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Provider提供两个功能对象的创建,依赖关系的管理. 只是,IoC容器这个词中,我们还得关注容器二字.它还包括了一些别的功能,例如以下图 Spring提供了两种类型的容器,各自是BeanFactory与ApplicationContext. 它们的差别在于: BeanFactory:对于它所管理的bean,採…
前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地提高代码的重用度,同时还可以获得强类型的支持,提升了应用程序的性能,避免了隐式的装箱.拆箱,以及运行时的类型转换错误. 2.为什么要有泛型? -----以简单的数组排序为例,第一次我们可能会要求对int型数组进行排序,然后我们很快的写出了答案, 第二次,又要求我们对byte[]数组进行排序,这时候我…
第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效负荷通过scopes的层级.一个事件可以从任何一个scope被传播,并且可以向上($emit) 或者向下($broadcast) 传送.   AngularJS核心服务和指令利用这个事件总线来处理应用状态的标志性重要的变化.比如,我们可以监听$locationChangeSuccess 事件(从 $…
app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/article/details/39378157) 回顾我们上一章,我们开发了一个最最简单的web服务器,它可以使用户访问服务器内的静态资源.当然这是远远不够的,在这一节里,我们就试着让服务器在能相应静态资源的基础上继续支持servlet. servlet接口 javax.servlet.Servlet接口…
这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向对象是以对象为中心,先有类,得到对象,通过对象之间相互通信实现功能,面向过程是先有算法,后有数据结构, 而面向对象是先有数据结构,然后再有算法. 然后就是一些重要的: main方法是静态的. Public static void main(String[] args) 源代码的文件名必须与公有类的名…
此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 笔者在工作之余阅读了一下高性能mysql,以下的内容对mysql的介绍以及书中涉及一些概念的总结归纳. 1.mysql架构 1.最上层负责链接处理.认证授权.安全等 2.中间一层涵盖了mysql的大多数核心功能.包括查询解析.分析.优化.缓存.内置函数:所有的夸存储引擎的功能都在这一层实现(存储过程.触发器.视图等) 3.第三层包含了存储引擎,存储引擎与上层使用API进行通讯,引擎之间不会有交互. 1.1…
对数据类型的选择将影响与数据库交互的应用程序的性能. 1.通常来说,如果一个页内可以存放尽可能多的行,那么数据库的性能就越好,因此选择一个正确的数据类型至关重要. 2.另一方面,如果在数据库中创建表时选择了错误的数据类型,那么后期的维护成本可能非常大,用户需要花大量时间进行ALTER TABLE 操作. 1. 数据类型 1. UNSIGNED 将数字类型无符号化. 例如: INT 的类型范围是 -2147483648 ~ 2147483647 INT UNSIGNED 的 类型范围是 0 ~ 4…
使用MySQL 选择数据库 使用USE关键字 USE database; 了解数据库和表 如果不知道可以使用的数据库名时,可用MySQL的SHOW命令来显示这些信息. SHOW DATABASES; SHOW DATABASES;返回可用数据库的一个列表.包含在这个列表中的可能是MySQL内部使用的数据库 为了获得一个数据库内的表的列表,使用 SHOW TABLES; SHOW也可以用来显示表列 SHOW COLOMNS FROM database; SHOW COLUMNS 要求给出一个表名…
一.数据类型的选择 MySQL的数据类型有很多种,选择正确的数据类型对于获得高性能特别地重要,如何选择合适的数据类型呢?主要遵从以下三个原则: 1.更小的通常情况下性能更好 一般情况下,应该尽量使用可以正确存储数据的最小数据类型,比如只需存储0--200的整数,则使用 tinyint unsigned 会比 int 好.更小的数据类型通常更快,因为它们占用更小的磁盘.内存和CPU缓存,并且处理时需要的CPU周期也更少.因此在选择的时候应该选择你认为不会超出范围的最小数据类型. 2.简单即为最好…
一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分享实验结果到微博,向好友展示自己的学习进度.实验楼提供后台系统截图,可以真实有效证明您已经完成了实验. 实验记录页面可以在“我的主页”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间).这些都是您学习的真实性证明. 3…
1.两结构相同的表数据间移植 Inset into 表一 Select 字段1,字段2,....字段n from表二 建立数据库时设置数据库编码 create database 数据库名 charset uft8 模糊查询时 %(任意字符任意个数) _(单个字符) 2.聚合函数使用时必须有group by给定分组条件 比如有一个表 求平均成绩是用聚合函数avg()时必须制定此函数作用的范围依据 3.分组,排序,再次筛选,取几条执行顺序 Where>group by >having>ord…
一. GenericServlet 1. 前面写的 Servlet和JSP学习笔记(一) 中的实例都是通过实现Servlet接口编写的,这样存在的问题就是:你必须实现Servlet中的所有方法,而不管该方法是否包含有用的 代码.所以,在此基础上Servlet API 为我们提供了GenericServlet 抽象类.   2. javax.servlet.GenericServlet接口 的源码如下: package javax.servlet; import java.io.IOExcepti…
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型.  ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定哪个数据类型是最好的,就选择不会超出范围的最小类型. 2. 简单就好.优先选择MySQL内建的类型而不是字符串来存储日期,时间. 3. 尽量避免NULL.可为NULL的列会使得索引的优化比较复杂. *********************************************** 一:数…
连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******** 连接非本机的MySQL服务器时,可以在-h后面加上目标MySQL服务器的IP.C:\> mysql -h 192.168.1.12 -u user -p Enter password: ******** 成功地连接后,可以在mysql>提示下输入QUIT (或\q)随时退出:C:\> Q…
零.组织结构 根据引言,作者将全书划分为四个部分: 一.页面加载js的最佳方式(开发前准备) 二.改善js代码的编程技巧(开发中) 三.构建与部署(发布) 四.发布后性能检测与问题追踪(线上问题优化) 这样的组织结构也符合我们的开发习惯,首先进入第一部分. 一.JavaScript加载 起因:script脚本的加载会阻塞浏览器渲染页面和处理用户交互,如果加载的script脚本太多太大,就会长时间阻塞,造成页面假死. 解决方案: 1.脚本位置 放在底部. 放在底部可以保证页面主体结构已经基本加载完…