MYSQL高级特性以及优化

  1. 安装 以及 配置等忽略

1)Linux进入Mysql的语句的语句

mysql -u  用户名 -p  回车  输入密码  回车即可

进入mysql以后可以用sql对数据库进行操作(他安装了一个服务端 一个客户端是否需要?)

  1. mysql的配置文件有哪些

  二进制日志文件 login-bin 用于主从复制

  错误日志文件 记录启动 日志 关闭日志 错误日志 的文件  默认是关闭的

查询日志log文件(慢查询日志  可以查询哪条sql的执行速率较慢)

数据文件:两系统,frm文件(存放的是数据库表结构)、MYD文件(存的是表数据)、MYI文件(索引文件)

 

  1. Mysql的逻辑架构
  1. Connectors连接层 ——》Connections Pool、Sql interface、Parser(解析 识别你的操作)、Optimizer(索引等的优化操作)、Caches&Buffers、ManagementService&Services&Utillties六个模块 为业务逻辑处理层 ——》Pluggable Storage Engines (存储引擎层)(支持十种以上 InnoDB与MyISAM是最常用的两种存储引擎  可以根据不同的业务需求选择不同的存储引擎)——》文件存储层(磁盘)

 

主要分为四层:连接层、服务层、引擎层、存储层

 

连接层 -- 服务层 -- 引擎层 -- 存储层

注:总体分为四层  可拔插的设计模式

 

MySIAM [mi sai m] 与 innoDB的对比

是否支持主外键

是否支持事务

缓存的区别 :MySIAM只缓存索引,innoDB缓存索引与数据

行表锁:MySIAM 表锁 不适合高并发 ,innoDB行锁适合高并发

表空间:MySIAM小 innoDB大

关注点:MySIAM性能 innoDB事务

 

  1. 相关语句

查看mysql存储引擎的语句(所有)

show engines

 

  1. InnoDB与MySAM的对比

对比项

MyISAM

InnoDB

主外键

不支持

支持

事务

不支持

支持

行表锁

表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作

操作时只锁某一行,不对其它行有影响,

适合高并发的操作

缓存

只缓存索引 不缓存真实数据

不仅缓存索引,还缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响

表空间

关注点

性能

事务

默认安装

Y

Y

  1. SQL优化
  1. sql慢 执行时间、等待时间长的原因

 Sql写的烂、索引失效(单值、复合)、关联查询有太多的join(设计的缺陷或不得已的需求)、服务器调优及各个参数的设置(缓冲线程数等)

创建索引的语句比如user这张表

Create index 索引名 on user(name,age) 创建了name与age的索引

课外笔记:join的相关知识

MySql读取Sql的顺序 (服务层的 Parser的功能)

总结:sql执行的总结 (join是用笛卡儿积连接的)

 

对所有JOIN知识的总结:JOIN的图例子表示

FULL OUTER JOIN mysql不支持此种全有  

另一种方法实现全有  A的独有加公共部分 + B的独有加共有部分

SELECT *FROM  A  LEFT JOIN B ON  key = key   

                    Union

                    SELECT * FROM B LEFT JOIN A ON  key=key

最后一种:同理是A的独有+B的独有

  1. Mysql索引

官方定义:索引是帮助Mysql高校获取数据的“数据结构”;所以索引的本质是数据结构

通俗理解:排好序的快速查找数据结构(有利于快速查找数据结构)

在数据之外,数据库还维护者满足特定查找算法的数据结构,这些数据结构以某种方式(引用指向数据),这样就可以在这些数据结构之上实现高级查找算法。这种数据结构就是索引。

结论:在数据之外,数据库还维护者满足特定查找算法的数据结构,这些数据结构以某种方式(引用指向数据),这样就可以在这些数据结构之上实现高级查找算法。这种数据结构就是索引。

一般来说,索引本身也很大,不可能全部存在内存中,因此索引常常以索引文件的形式存储在磁盘上。我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树并不一定是二叉的)结构组织的索引,其中聚集索引,次要索引,复合索引,前缀索引,唯一索引这几种索引都是使用的时B+树索引,统称索引。当然除了B树这种索引之外还有哈希索引(hash index)等。

自我理解:当你给某个创建一个索引时 会把此字段生成B树 结构组织的索引

优势:

劣势:

这里解释了为什么 Insert、update、delete多的数据库或者字段较多的表不适合增加索引,因为对表更新时都会调整因为更新所带来的键值变化后的索引信息;

 

索引的分类:

单值索引:即一个索引只包含单个列,一个表中可以有多个单例索引

唯一索引:索引列的值必须唯一、但是允许空值

复合索引:一个索引包含多个列

全文索引:(是否是一个索引类型?)

 

创建索引的sql

Mysql索引结构类型:

BTree索引:

Hash索引:

Full-text索引:

  1. Tree索引:

BTree的检索原理图:

上图原理图的分析:

数据库是通过IO进行读写的

哪些情况适合创建索引

哪些情况不适合建索引:

 

 由于总结内容相对较多,在这就不详细列出了,有想要文档的小伙伴,评论后私信即可获取完整文档。。。。。。。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值