MySQL技术内幕学习笔记四

视图视图是基于基表的虚表,它由sql查询来定义,可以当作表使用,但是视图中的数据没有实际的物理存储。视图可以作为安全层使用。其作用在于一些应用程序本身并不关心基表,只需要按照视图定义来存取数据。 oracle提供的物化视图Oracle支持物化视图,其不再是虚表,而是基于基表实际存在的表。物化视图可以用于预先计算并保存多表的链接或聚集等耗时操作的结果。在SQL server数据库中称为索引视图。在mysql 中可以使用基表加触发器的策略来实现“物化视图”。 分区表innodb存储引擎支持水平分区,主要用于数据库的高可用管理。 MySQL数据库支持以下几种分区 range分区行数据基于给定分一个连续区间的列值被放入分区 list分区行数据基于一些离散的值被放入分区。 hash分区根据用户自定义的表达式的返回值进行分区(返回值不能是负,必须是整数) key分区根据mysql提供的哈希函数进行分区 如果表中存在唯一索引或主键那么分区列必须是其的一部分

MySQL技术内幕学习笔记三

文件概要 文件类型 参数文件 日志文件 socket文件 pid文件 MySQL表结构文件 存储引擎文件 参数文件 在MySQL实例启动时,会读取一个参数文件进行初始化。 MySQL可以没有参数文件。如果没有参数文件,就以源代码中的默认值为标准。 MySQL的参数分为动态参数,静态参数。动态参数可以在MySQL实例运行的时候更改,而静态参数在MySQL实例的整个生命周期内都不能更改。 日志文件 记录了影响了MySQL数据库的各中类型的活动。 日志文件的类型一般包括:错误日志,二进制日志,慢查询日志,查询日志。 慢查询日志,会记录运行超过long_query_time(默认值为10s)的sql语句。 查询日志,记录了所有对MySQL数据库的请求。默认文件名为:主机名.log。未能正确执行的请求也会被记录。 二进制日志,记录所有对MySQL进行更改的操作。其作用包括恢复数据,复制,审计。 套接字文件 在unix系统下连接本地MySQL可以使用unix套接字方式。该方式需要一个套接字文件。

MySQL技术内幕学习笔记二

重做日志缓存 重做日志缓冲(redo log buffer) 重做日志缓冲同样也在innodb内存区。innodb存储引擎会将重做日志信息先放到重做日志缓冲区,然后以一定的频率刷新到重做日志中。 重做日志缓冲不必太大。因为一般每一秒都会刷新到重做日志文件中。默认为8MB,该值可以由innodb_log_buffer_size控制 重做日志缓冲刷新的三种情况。1.master thread每一秒都会刷新一次。 2.每次事务提交时都会刷新一次。 3.重做日志缓冲池剩余空间小于1/2时,会刷新。 额外的内存池 额外的内存池 innodb存储引擎采用一种称为内存堆的方式进行。在给一些数据结构分配内存时,会从额外的内存池中申请,但该内存中的内存不足时,会从缓冲池中申请。 SQL语句的分类 数据库查询语言DQL -各种查询 数据操纵语言DML 增删改 数据定义语言DDL 用来创建数据库中的各种对象,如表,视图,索引等 数据控制语言DCL 授权,回滚数据库等

MySQL技术内幕学习笔记一

数据库是物理操作系统文件或其它形式文件类型得集合。 实例是数据库后台线程和共享内存区。通常数据库和实例是一一对应的关系。一个数据库对应一个实例。 MySQL是一个单进程多线程架构的应用。 MySQL数据库启动时会按照/etc/my.cnf–>/tec/mysql/my.cnf–>/usr/local/mysql/etc/mycnf–>~/.my.cnf的顺序读取配置文件(也可能是.ini后缀)。如果配置文件中有相同的配置则按最后一个读取的文件进行配置。如果没有配置文件,则使用数据库默认参数。 innodb采用聚集的方式存储数据。每张表都是按主键的顺序进行存放的。如果没有显式的在表中定义主键。innodb会为每一行生成一个6字节的ROWID作为主键。 innodb存储引擎的体系架构后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。还要负责将已修改的数据文件刷新到新的磁盘文件。还要保证数据库发生异常情况时,能恢复innodb存储引擎到正常的运行状态。