- 安装 以及 配置等忽略
1)Linux进入Mysql的语句的语句
mysql -u 用户名 -p 回车 输入密码 回车即可
进入mysql以后可以用sql对数据库进行操作(他安装了一个服务端 一个客户端是否需要?)
- mysql的配置文件有哪些
二进制日志文件 login-bin 用于主从复制
错误日志文件 记录启动 日志 关闭日志 错误日志 的文件 默认是关闭的
查询日志log文件(慢查询日志 可以查询哪条sql的执行速率较慢)
数据文件:两系统,frm文件(存放的是数据库表结构)、MYD文件(存的是表数据)、MYI文件(索引文件)
- Mysql的逻辑架构
- 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事务
- 相关语句
查看mysql存储引擎的语句(所有)
show engines
- InnoDB与MySAM的对比
对比项 | MyISAM | InnoDB |
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 操作时只锁某一行,不对其它行有影响, 适合高并发的操作 |
缓存 | 只缓存索引 不缓存真实数据 | 不仅缓存索引,还缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
默认安装 | Y | Y |
- SQL优化
- 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的独有
- Mysql索引
官方定义:索引是帮助Mysql高校获取数据的“数据结构”;所以索引的本质是数据结构
通俗理解:排好序的快速查找数据结构(有利于快速查找数据结构)
在数据之外,数据库还维护者满足特定查找算法的数据结构,这些数据结构以某种方式(引用指向数据),这样就可以在这些数据结构之上实现高级查找算法。这种数据结构就是索引。
结论:在数据之外,数据库还维护者满足特定查找算法的数据结构,这些数据结构以某种方式(引用指向数据),这样就可以在这些数据结构之上实现高级查找算法。这种数据结构就是索引。
一般来说,索引本身也很大,不可能全部存在内存中,因此索引常常以索引文件的形式存储在磁盘上。我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树并不一定是二叉的)结构组织的索引,其中聚集索引,次要索引,复合索引,前缀索引,唯一索引这几种索引都是使用的时B+树索引,统称索引。当然除了B树这种索引之外还有哈希索引(hash index)等。
自我理解:当你给某个创建一个索引时 会把此字段生成B树 结构组织的索引
优势:
劣势:
这里解释了为什么 Insert、update、delete多的数据库或者字段较多的表不适合增加索引,因为对表更新时都会调整因为更新所带来的键值变化后的索引信息;
索引的分类:
单值索引:即一个索引只包含单个列,一个表中可以有多个单例索引
唯一索引:索引列的值必须唯一、但是允许空值
复合索引:一个索引包含多个列
全文索引:(是否是一个索引类型?)
创建索引的sql
Mysql索引结构类型:
BTree索引:
Hash索引:
Full-text索引:
- Tree索引:
BTree的检索原理图:
上图原理图的分析:
数据库是通过IO进行读写的
哪些情况适合创建索引:
哪些情况不适合建索引:
由于总结内容相对较多,在这就不详细列出了,有想要文档的小伙伴,评论后私信即可获取完整文档。。。。。。。