您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页Mysql必备知识总结

Mysql必备知识总结

来源:华拓科技网

1、事务

数据库事务(Transaction)是访问并可能操作各种数据项的一个数据库操作的序列,是一个不可分割的工作单位。

特性:

原子性(Atomicity),持久性(Durability),隔离性(Isolation),一致性(Consistency)

隔离性中对并发事务处理时的问题:

脏读,不可重复读,幻读。

事务的隔离级别:


2、索引

好比是你去图书馆借书,先从一个电脑上查找所在的书在几楼第几个书架上,再过去查找。

优缺点:


1、添加索引,查询速度非常的快

2、新增,修改和删除数据比较慢

3、添加索引,无形中占用了我们的空间(数据就分问:索引数据+普通数据)。

索引的分类

1) 主键索引 所有的主键都是⼀种索引,天然的。

2) 唯⼀索引 将⼀个类设置为unique ,这种设置也是⼀种索引。

3) 普通索引 表中的普通类,可以设置为普通索引

索引与sql优化:

覆盖索引的意思是:查询的字段刚好是索引字段,我们只需要查询索引数据就可以将数据查询出来,不需要去真实的表中查看。

最左前缀是在使用索引时,需要遵守的法则。在一个联合索引如idx(a, b, c),执行查询SQL时,如果查询条件包含索引的最左前缀,那么可以使用加速查询。对于上述例子,最左前缀包括idx(a), idx(a, b), idx(a, b, c)


3、SQL优化

全字段匹配,最佳左前缀,索引列上不计算,不能使用索引中范围条件右边的列,尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *,使用不等于(!= 或者<>)的时候无法使用索引,注意字段的null值和 not null 对sql的影响,like以通配符开头('%abc...')mysql索引失效,字符串不加单引号索引失效 (底层使用数据类型转换),少用or,用它来连接时会索引失效

4、海量删除

删除大表的多行数据时,会超出innod block table size的,最小化的减少锁表的时间的方案是:
1、选择不需要删除的数据,并把它们存在一张相同结构的空表里
2、重命名原始表,并给新表命名为原始表的原始表名
3、删掉原始表

删除索引表的数据:

先删除索引

再把需要删除的数据删除

再新建索引


5、缓冲池

在MySQL查询数据的时候,是通过存储引擎去磁盘做IO来获取数据库中的数据,这样每次查询一条数据都要去做一次或者多次磁盘的IO,无疑是非常慢的。而缓冲池就能非常好的解决这个问题。

当据从磁盘中取出后,缓存内存中,下次查询同样的数据的时候,直接从内存中读取。为此,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能。


6、Innodb和myisam

InnoDB和MyISAM的差别
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
以下是一些细节和具体实现的差别:


7、逻辑架构

1、Connectors 客户端连接层

客户端连接层 Connectors,位于MySQL体系架构的最上层,提供与MySQL服务器建立连接的能力,是一些客户端和连接服务,包含本地服socket通信和大多数基于C/S工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证及相关的安全方案。

MySQL首先是一个网络程序,在TCP之上定义了自己的应用层协议。所以要使用MySQL,我们可以编写代码,跟MySQLServer建立TCP连接,之后按照其定义好的协议进行交互。或者比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MysQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。

2、第一层:Connection Pool 连接池

主要负责存储和管理客户端与数据库的连接信息,连接池里的一个线程负责管理一个客户端到数据库的连接信息。

负责监听对 MySQL Server 的各种请求,接收TCP连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信, 接受客户端的命令请求,传递 Server 端的结果信息等。

线程池则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。每一个连接都从线程池中获取线程,省去了创建和销毁线程的开销。

3、第二层:SQL服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所以跨存储引擎的功能也在这一层实现,如过程、函数等。

在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化︰如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务