有关数据库的总结

1.mysql引擎的选择

1.查看当前数据库支持的类型
show engine
2.查询表的引擎
show table status from db1;
3查询具体表的引擎
show table status from db1 where name=‘student’;

mysql 1.5之后默认 innodb

create dastabase if not exists db1 character set utf8;

create table if not exists student(
id int primary key anto_increment, name varchar(20))engine=myisam;
修改表的存储引擎
alter table student engine=innodb;

Myisam:不支持事务/不支持外键/支持全文检索和表级别锁定,独写相互阻塞,读取速度快,节约资源,所以如果应用是以查询操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性,并发性要求不是很高,那么选择合格存储引擎是非常合适的。
innodb:是mysql的默认存储引擎,由于innodb支持事务/支持外键/行级锁定,支持所有辅助索引(5.5.5后不支持全文检索),高缓存,所以用于对事物的完整性有非常高的要求,在并发条件下要求数据的一致性,读写频繁的操作,那么innodb存储引擎是比较合适的选择,比如bbs,计费系统,充值转账等。
memory:将所有的数据保存在ram中,在需要快速定位记录和其他类似数据环境下,可以提供更快的访问,memory的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,其次要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的,memory表通常用于更新不太频繁的小表,用以快速得到访问结果。

2.索引

索引的分类:
按照功能分类:
普通索引:最基本的索引,他没有任何限制。
唯一索引:索引列的值必须唯一,但允许有空值,如果是组合索引,则列值组合必须唯一。
主键索引:一种特殊的唯一索引,不允许有空值,一般在建表时同时创建索引。
组合索引:将单列索引进行组合。
外键索引:只有innodb引擎支持外键索引,用来保证数据的一致性,完整性和实现级联操作。
全文索引:快速匹配全部文档的方式。innodb引擎5.6以后才支持全文索引,memory引擎不支持。

按照结构分类:
b+tree索引:mysql使用最频繁的一个索引数据结构,是innodb和myisam存储引擎默认的索引。
哈希索引:mysql中Memory存储引擎默认的索引;

索引的相关操作
查询索引:
show index from studnet;

无索引的查询:
没有索引时查询,会逐个数据进行查询,效率最低

为姓名添加普通索引
create index idx_name on student(name);
添加唯一索引
create unique index idx_name on student(name);
(一般不用,只用id为主键)

alter table student add index idx_name(name);

b tree
b+tree 非叶子节点只存储key值

扫描二维码关注公众号,回复: 10185987 查看本文章

create table if not exists user(
name varchar(10),
address varchar(10),
phone varchar(10));

添加联合索引

alter table user add index idx_three(name,address,phone);

最左匹配

sql中必须有 name

事务的特性

actomic consistency isolation durability

锁的分类

表操作分类:
共享锁:
排他锁:

按粒度分类:
表级锁:
行级锁:
业级锁:
(myisam支持表级锁,innodb支持表级锁,行级锁)

按使用方法分类:
悲观锁:
乐观锁:

开启事务
start transaction;
查询事务,并加锁
(共享锁,其他事务可以查询,不能改
select * from student where id=1 lock in share mode;
//不带索引则锁整张表
select * from student where name='小刘' lock in mode;
//排他锁
select * from student where id=1 for update;
释放锁
commit

myisam不支持事务,直接加锁

//加锁
lock tables student read;
select * from student where id=1;
//解锁
unlock tables;

innodb性能优化建议
1.尽量通过带索引的列来完成数据查询,从而避免innodb无法加行锁而加表锁
2.合理设计索引,索引要尽可能准确,尽可能的缩小范围,避免造成不必要的锁定。
3.尽可能减少基于范围的数据检索条件
4.尽量控制事务的大小,减少锁定的资源量和锁定时间长度。
5.在同一个事务中,尽可能做到一次所锁定所需要的所有资源,减少死锁产生的概率
6.对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁的产生。

发布了25 篇原创文章 · 获赞 1 · 访问量 783

猜你喜欢

转载自blog.csdn.net/qq_42770949/article/details/104458537