MYSQL
插件式存储引擎的数据库
存储引擎: 存储方式 [磁盘]
1.MyISAM
不支持外键,不支持事务
支持全文索引,底层用B+树;
支持表锁;
2.InnoDB
支持外键,支持事务;
不支持全文索引,底层用B+树;
支持行锁;
3.MEMORY
数据存在内存上,读写效率高,适合存储临时表数据;/*不考虑数据安全*/[从几个表中拼接出来的临时表];
支持索引,底层哈希索引;
varchar == char;
不支持text、BOLB类型字段;
[文本] [图片] 太大占内存空间;
4.ARCHIVE
归档存储引擎 1:10 的默认比例进行压缩后存储;
适用数据量大、查询少的数据。
日志数据: 记录整个执行过程中的每一个操作,无论正常异常操作。
//只支持 insert select 操作;
//索引
1.数据结构
2.全文索引 索引的一种方式,根据该索引建立字段的属性划分;
//事务
一组SQL语句的集合
四个原则
A 原子性 要么全部执行成功,要么全部执行失败;
C 一致性 保证完整性约束;
I 隔离性 消除事物之间的相互影响;
D 持久性 事务执行的结果在磁盘上永久保存;
//锁机制
表锁 锁定整张表
行锁 锁定整行
1.MyISAM 数据和索引分离开来设计、 0非聚集索引
B+树; (搜索树、多路排序树)
<叶结点放数据地址>
// create index index_1 on student(id);
创建表更改存储引擎
create table student
(
id int primary key,
name varchar(15) not null,
age int default 18
)engine = MyISAM;
explain select * from stu where id = 6; √ 使用索引
explain select * from stu where name = "lisi"; ×
2.InnoDB 索引当场数据一部分存储、 0聚集索引 数据相对集中
B+树;
<叶结点放数据>
数据的存储依赖索引;但
create table stu(id,name,sex,age);
insert into ()()()(); 默认为InnoDB,但没有设置索引,仍可以插入数据成功;
系统创建索引的规则:
1.查询是否存在主键,存在即创建主键索引;
2.查询是否存在唯一键,存在即创建唯一索引;
3.如果上述都没有,系统添加隐藏字段(6个字节)创建索引;
隐藏字段看不见如何插入数据?auto_increment 添加数据会自动+1;
在InnoDB中存储数据的索引主索引,主索引不允许关键字重复;
辅助索引是在叶结点不存储数据,存储主索引的索引值; 辅助索引查询 2 次,先查询辅助索引,然后找到主索引,再查找相对应的数据;
索引的优化; <空间换时间>
1.那种情况建立索引
1)经常被查询的字段
2)用于主键字段
3)用于连接的字段 比如 学生信息表 成绩表 的 id 字段,提供多表查询的查询效率
4)范围查询
5)经常用于排序处理的字段
6)经常用来 where 过滤的字段
2.那种情况不应该建立索引
1)不经常用于查询的字段
2)数值较少的字段 比如 性别字段
3)数值较多,数据量大的字段 比如 BOLB类型或者text类型字段
4)修改操作大于查询操作的字段
索引的分类:
1.普通索引 基于普通字段创建 <mysql原理>
create index index_name on table_name(field_name);
alter table tablename add index index_name on (field_name);
create table tablename(index index_name(filed_name));
2.唯一索引
3.全文索引 消耗时间消耗硬盘
InnoDB不支持,
4.单列索引多列索引
5.组合索引
多个字段合起来构成一个索引;
索引的注意事项:
1)索引项不会包含NULL值;
2)使用短索引;
3)索引列排序;
4)like操作
第一个字母是通匹,不会用到索引
5)不要在索引项上进行计算;