-
有哪些数据类型
1 整数类型 tinyInt,smallint,mediumint,int(integer)
2 小数类型 float,double,decimal(m,d)
3 日期类型 year,time,date,datetime,timestamp
4 文本,二进制类型 CHAR(M) ,VARCHAR(M),BLOB…
5 枚举类型 -
什么是索引
索引是一种为了更快检索数据库存储数据的一种B+树数据结构 -
索引的优缺点
优点:
a. 提高数据的检索速度,数据检索的时间复杂度为log(n),也就是B+树的高度
缺点:
a.每建立一个索引就会产生一颗B+树,需要占用物理空间来存储这个数据结构
b.索引只有在查询的时候不需要做维护,但是做增/删/改是需要进行维护的,要对B+节点进行修改,降低了数据库修改的效率 -
索引使用场景
a. where 条件查询
b.order by 排序
c. join on 的连接条件
d. 能使用覆盖索引的就使用,这样可以不用回溯主键索引,提高效率 -
索引类型
a.主键索引,不允许NULL,一个表只能有一个主键索引,主键列不能重复
b.唯一索引,允许NULL, 一个表可以有多个,索引列不能重复
c.普通索引,允许NULL, 一个表可以有多个,索引列可以重复
d.全文索引 -
创建索引的原则
a.最左前缀原则,主要是指用组合索引的时候,建立的B+树的排序,就是根据组合的字段的排序去排序的
b.查询比较频繁的字段才建立索引,维护索引成本还是比较高的
c.跟新字段比较频繁的时候不适合建立索引,因为涉及到修改,数据要修改,B+树节点也要做调整
d.可以扩展的索引,就尽量不要去新建索引(组合索引重复使用的情况较多)
e.字段区分度低的不适合建索引,检索效率提高不明显
f.索引字段越小越好,这样固定16k的一个节点可以存储更多数据,减少IO次数
g.索引字段最好设计为not null, 或者用一个值代替null
h.联合索引将区别度大的字段放前面,可以提高检索效率 -
非聚簇索引一定要回表吗
当辅助索引包换了所有select 后面的字段值时不需要回表,包括唯一,普通,联合索引的情况 -
什么是事务
事务是逻辑上的一组不可分割数据库操作,要么执行,要么不执行。执行结果使数据库状态转为另外一种状态 -
事务的四大特性
a.原子性(一组不可分割的一系列操作)
b.一致性(一组操作,不会出现中间状态结果,数据是完整的,强调完整性)
c.隔离性 (一组操作在全部执行后才对其他事务可见,强调隔离不相互影响)
d.持久性(一组操作完成提交后,是持久不可变的,即使数据库故障) -
什么是脏读,不可重复读,幻读
脏读:一个事务执行了一部分操作,但是回滚了,而另外一个事务读到了中间状态
不可重复读: 一个事务两次读取一条记录的结果不一样,比如在两次读之间进行了更新,强调更新
幻读:一个事务两次读取数据,发现两次结果集不一样,比如在两次读取中进行插入一些记录,强调新增 -
事务隔离级别
READ-UNCOMMITTED:读未提交,会引发脏读,不可重复读,幻读
READ-COMMITTED: 读取已提交,可以解决脏读问题,还是存在不可重复读,幻读问题
REPEATABLE-READ:可重复读,可以解决脏读,不可重复读问题,还是存在幻读问题
SERIALIZABLE:串行,可以解决脏读,不可重复读,幻读问题,所有事物串行化,效率很低
(mysql默认采用REPEATABLE-READ,而oracle默认采用READ-COMMITTED,隔离级别是基于锁实现的,隔离级别越低锁越少,理论上REPEATABLE-READ并发效果没READ-COMMITTED好,但是mysql使用mvvc来实现的,所有并不会对mysql的性能带来什么影响)
常见问题之mysql
猜你喜欢
转载自blog.csdn.net/weixin_38312719/article/details/105610519
今日推荐
周排行