时间:2021-07-01 10:21:17 帮助过:23人阅读
DDL解释器
查询执行引擎
存储管理器组件:
权限及完整性管理器
事务管理器(保证事务的完整性、原子性等)
文件管理器
缓冲区管理器(数据查询存储要先将数据缓存再内存中,缓冲区管理器用来管理缓存空间,如缓存哪些数据)
MySQL:单进程多线程模型
一般来说MySQL会为每个用户的请求生成一个线程进行请求的响应,意味着一个用户的所有操作(增、删、查、改等)都在同一个线程中完成
MySQL的线程分为:守护线程、应用线程
注:通常来说每个查询请求都要消耗大量的内存(如一个大的查询可能要涉及到1G的数据量都有可能,而在32位系统上一个进程最多只能使用2.7G的内存),所以MySQL的并发能力并不是想象中的那么大。所以在一个集群中数据库服务器可能会是整个系统中最慢的一个节点,因此要尽量避免与数据库的交互操作
那么如何避免与数据库的交互或者提高数据库服务器的性能?
1.将第一次查询的结果保存在缓存服务器中(varnish、memcache),当以后有相同的查询请求时直接在缓存服务器中找
2.线程复用:如DisCuz论坛同一个用户可能会每隔一段时间发一个帖子,而每次发帖对数据库服务器来说都是一个新的请求,每次都要创建删除线程太麻烦,可以将线程实现多次利用
3.使用性能好的服务器且OS为64位
且MySQL对SMP(对称多处理器)架构的cpu支持很差,MySQL可以将多个查询在不同CPU上处理,但不能讲一个大的查询分开在多个cpu上同时运行,即一个单独语句只能在一个cpu上运行,这是MySQL不如orcale的一个很重要的原因(即扩展性不行),但是可以将每个MySQL的功能做的简单点,一个服务器只处理一点功能,做一个MySQL集群,这样可以有效解决这个问题
关系运算:
投影 只输出某个字段或者某个属性
选择 只输出符合条件的行
自然选择 在两张表的对应字段通过等值关系建立的连接叫做自然连接
表1
A | 1 |
B | 2 |
C | 1 |
D | 3 |
表2
1 | bash |
2 | csh |
3 | zsh |
4 | ksh |
5 | tcsh |
自然连接后
A | 1 | 1 | bash |
B | 1 | 1 | bash |
C | 3 | 3 | zsh |
D | 2 | 2 | csh |
4.笛卡尔乘积
(a+b)*(c+d)=ac+ad+bc+bd
表1中每行与表2中每行分别连接=4*5=20行
通常笛卡尔乘积查找很慢,应尽量避免
5.并
表1中一行 + 表2中一行 ==新的一行
MySQL的结构组成
表管理器:负责创建、读取或修改表定义文件;维护表描述符高速缓存;管理表锁;
表结构定义文件
表修改模块:表创建、删除、重命名、移除、更新或插入之类的操作;
表维护模块:检查、修改、备份、恢复、优化(碎片整理)及解析;
缓冲区管理器:有缓存置换策略,一般来说内存远远小于Disk,所以当操作涉及的数据量大于内存时,缓冲区管理器要按照缓存策略(如最近最少使用策略)进行数据块的加载,移除等操作
数据在磁盘上的存储:磁盘为块型设备,数据以块(block)为但为单位进行存储,在进行数据的读取(I/O操作)时也只能以块为单位进行操作;而不能像字符型设备那样直接进行按需求读取所需的字符
而一个块中往往保存着多个行(如果数据不是很大),如果将其中的某个行删除,长时间下来会差生大量的数据缝隙,进而导致存储空间的浪费,那么如何利于数据缝隙?
每个块都有一个块头,一般有存储引擎进行数据块的管理,块头里面记录了保存有多少行,即哪里是空白的,从而块头可以方便的对磁盘进行数据整理,进而避免碎片的产生
块头(记录了此块中保存多少行,哪些未保存) |
缝隙(删除导致的) |
数据1 |
缝隙 |
数据2 |
数据的记录组织:
堆文件组织,数据可以保存在文件中的任意一个位置;有利于存储,不利于查找
顺序文件组织,数据按照“搜索码”进行顺序存储;不利于存储,每次数据更新要重新排序,但有利于查找
散列文件存储,数据的某个字段进行散列运算(hash运算,如取余)然后根据不同的结果保存在不同的桶中
指针存储,每行数据在存储时还要记录下一行的指针,这样就不用按照顺序进行存储
表空间:将多个表的数据存放在同一个表空间中,标空间相当于一个更高级的数据存储空间
数据字典:表、视图等关系的元数据;如关系的名字、字段名称、字段类型、字段长度、用户名字、授权、密码等
本文出自 “11097124” 博客,请务必保留此出处http://11107124.blog.51cto.com/11097124/1896863
Mysql及数据库的基础概念
标签:mysql及数据库的基础概念