mysql数据库管理系统(DBMS)
初始化模块自动给我们生成3个数据库
- mysql
- perfomance schema
- information schema
连接管理
分配给进程模块
要求登陆
执行命令
分发
真正的数据库就是对应了一个一个的文件
结构图
下面是
存储引擎
不同的机构去写这个开源的东西
- 如何存数据
- io读取方式
引擎介绍
- isam: 读取快 不支持容错 没有事务
- myisam:
查的快
如果使用该数据库引擎,会生成三个文件: .frm:表结构信息 .MYD:数据文件 .MYI:表的索引信息 - innodb:
上面两个不支持外键和事务
而innodb 支持 mysql 5.5 默认引擎
InnoDB
在 MySQL5.7 版本中,InnoDB 存储引擎管理的数据文件 为两个:分别是 frm(索引),idb(表和数据) 文件。
特 点 :
1 )、 支 持 事 务
2 )、 数 据 多 版 本 读 取 ( InnoDB+MyISAM+ISAM
3 )、 锁 定 机 制 的 改 进
4 )、 实 现 外 键
innodb 与 myisam 区别
1.1.InnoDB 支持事务
2.InnoDB 支持外键
3.InnoDB 是聚集索引 ,(数据文件是和索引绑在一起) 用blance 树
必须要有主键,
MyISAM 是非聚集索引,数据文 件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
- InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描
memory 存储引擎
存在内存中 只有一个表结构是存在磁盘上
存储引擎的管理命令
查看数据库支持的存储引擎
show engines
就是默认引擎是什么。
show variables like'%storage_engine%'
也可以在 MySQL 配置文件中查看。 windows-my.ini。 Linux-my.cnf
show create table user;
可以建表时指定引擎
engin=myisam
可修改
配置文件
里面有什么表信息 配置信息
C:\ProgramData\MySQL\MySQL Server 5.7\Data
mysql索引
适合建立索引
第一、在经常需要搜索的列上;
第二、在作为主键;
第三、在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
第四、在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; (between)
第五、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的 排序;
第六、在经常使用在 WHERE 子句中的列上面创建索引,加快条件的判断速度。 建立索引,一般按照 select 的 where 条件来建立,比如: select 的条件是 wheref1and f2,那么如果我们在字段 f1 或字段 f2 上建立索引是没有用的,只有在字段 f1 和 f2 上同时 建立索引才有用等。
实例
比如用户名 ,id这种经常用的就是作为查询条件适合建索引
性别不经常查询就不适合建立
比如性别 不适合 因为结果集太大
修改大于检索就不适合创建索引
常用索引
blance tree
广度尽可能地大深度尽可能地少
B-tree 中,每个结点包含:
1、本结点所含关键字的个数;
2、指向父结点的指针;
3、关键字;
4、指向子结点的指针;
关键字存在一个平衡二叉树中
full-text
全文索引 特殊的b树 abc
a
ab
abc
只有左边 称为最左查找 "xxx%" 只能解决这种
索引的管理
普通索引
新建索引
CREATE INDEX inname on
user(
PASSWORD(10));
查看索引
show INDEX from
user;
user 是表名
删除
DROP INDEX
innameon
user;
唯一索引:
索引的列值必须唯一 但是可以为空全文索引
只能是char varchar text 这些列
大容量的表 需要先将 数据录入进表 再建立索引组合索引 符合最左前缀
CREATETABLEarticle(idintnotnull,titlevarchar(255),timedate);
ALTERTABLE articleADDINDEXindex_title_time(title(50),time(10));
会创建两个索引
–title,time
–title
策略避免全表扫描 再where orderby 上面建立 索引
避免判断空值 设置默认值 然后比较是否是那个值 空值导致 索引失效
避免不等值判断
避免使用 or 逻辑
慎用 in 和 notin 逻辑
注意模糊查询
如果头匹配是必要逻辑,建议使用全文搜索引擎(Elasticsearch、 Lucene、Solr 等)。避免查询条件中字段计算 就是where 左边不要有运算
mycat
- 主从备份
- 读写分离
- 集群搭建
- 负载均衡策略