1、mysql

存储引擎及区别

1、MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。

2、innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。

索引方法

1、B+Tree索引

2、Hash索引

索引类型

1、Primary 主键索引

2、Unique 唯一索引

3、NOrmal 普通索引

4、Spatial 空间索引(只能用于myisam引擎)

5、FullText 全文索引(长字符串用)

最左前缀

1、联合索引的多个字段中,只有查询条件为联合索引的第一个字段时,查询才能使用索引

2、对于索引的第一个字段,用like时左边必须是固定值,通配符只能出现在右边

覆盖索引

覆盖索引是指,索引上的信息足够满足查询请求,不需要再回到主键上去取数据。

事务的ACID属性

1、原子性(Atomicity):事务是最小的工作单位

2、一致性(Consistency):要么都成功,要么都时报

3、隔离性(Isolation):多个事务间不会相互影响

4、持久性(Durability):事务不可逆

事务隔离级别

1、读未提交

2、读提交

3、可重复读(mysql innodb默认隔离级别)

4、串行读

并发事务带来的问题

1、更新丢失

1.1 回滚覆盖

1.2 提交覆盖

2、脏读,读到了其他事务为提交已修改的数据

3、不可重复读,两次读取的数据不一样 

4、幻读,两次读取的数据条目不一致

MVCC(Multi-Version Concurrency Control)

多版本并发控制(乐观锁的一种实现方式)

每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号(可能为空,其实还有一列称为回滚指针,用于事务回滚,不在本文范畴)。这里的版本号并不是实际的时间值,而是系统版本号。每开始新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询每行记录的版本号进行比较

数据库三大范式

1、属性原子性不可再分(关系型数据库都满足)

2、非主属性要依赖于主属性

3、非主属性的属性不能有传递依赖关系

char和varchar的区别

1、char定长,不足部分右填充空格补足,varchar不定长,指定长度后不空格补足

2、char检索效率搞,varchar检索效率低

3、char最大长度255,varchar

enum与set区别

都是列表,enum单选,set多选

mysql锁类型

表级锁(意向共享锁、意向排他锁)

行级锁(共享锁、排他锁)

页面锁

慢sql排查

-- profiling 是否开启
select @@profiling;
-- 查看sql执行时间
show profiles;
-- 查看sql耗时详情
show profile for query 155;

查看版本

select version()

查看表索引

show index form table_name

带行号查询

5.7以及之前版本

select @RN := @RN + 1 ,t1.*  from tabke_name t1,(select @RN:=0)  t2

8。0版本(同SQL server写法)

select row_number() over(order by t1.id)  as RN,t1.* from table_name t1

sqlserver 写法

替换插入

insert into table_name(a,b) values(1,2) on duplicate key on update b = b+1;

replace into table_name(a,b)values(1,2);

原文地址:https://www.cnblogs.com/ares-core/p/13080155.html