数据库学习:一、MySQL关系型数据库

2021/3/28 首次更新,代码评审讨论到索引失效场景,主要是为了记录索引失效场景有哪些,文中对索引类型等内容存在待补充

1、MySQL常用数据引擎
MySQL常见数据库引擎主要有Innodb和Myisam,本文主要关注两种引擎下的索引。
1.1 Innodb引擎
Innodb引擎提供的索引模式是聚集索引。
Innodb引擎设计目标是处理大数据容量的数据库系统,本身是基于MySQL后台的完整的系统。MySQL运行时,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。
Innodb引擎提供以下特性
(1)数据库ACID事务的支持;
(2)行级锁;
(3)外键约束;
但是,该引擎不支持全文搜索索引(5.6版本开始支持),且启动较慢,不会保存表的行数,所以select count(*)from table时,会扫描全表。但用数据库事务时,该引擎首选,因为锁粒度小,写操作是不会锁定全表的,并发较高的场景使用会提升效率。
InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set num=1 where name like “%aaa%”

关系型数据库统一采纳的原则ACID
A:atomicity原子性,意味着数据库的事务执行是作为原子,即不可再分,该原子不会有中间状态,要么全部完成,要么全部不完成。
C:consistency一致性,事务开始之前和结束之后,数据库的完整性约束没有被破坏,若甲乙双方进行汇款操作,无论汇款成败,甲乙双方账户总额都应该一致。
I:isolation隔离性,多个事务同时执行,彼此执行互不影响,事务之间需要序列化执行,有时间顺序。隔离性可以防止多个事务并发执行时,由于交叉执行导致的数据不一致。由于数据库隔离级别设置不同,多个事务并发进行影响可能导致脏读、不可重复读、幻读等。
D:durability持久性,事务运行成功后,对系统状态更新是永久的,不会无故回滚撤销,事务提交后,则持久化保存在数据库中。

1.2 MyISAM引擎
此种引擎使用的是非聚集索引,为MySQL默认引擎,不提供事务支持,也不支持行级锁和外键,所以执行写操作时,需要锁定整表,效率降低。但是MyISAM引擎是保存表的行数,若该表读操作远远多于写操作并不需要事务支持,可以优先考虑该MyISAM引擎。
2.索引实现

聚簇索引、非聚簇索引底层实现结构都是B+树。

聚簇索引:数据结构中存储的都是实际的数据
非聚簇索引:数据结构中存储内容是实际数据的地址值。

3.索引

索引其实是一种特殊文件,包含对数据表里所有记录的引用指针,能够加快数据库查询速度,一般数据库默认都会为主键生成索引。

3.1普通索引
3.2唯一索引
3.3全文索引
3.4主键索引
3.5 组合索引
4.索引失效场景
4.1 表数据增长

where出来的数据大于15%,索引失效(会导致CBO计算走索引花费大于走全表)

4.2 统计信息失效
4.3 索引本身失效
(1)单独引用复合索引里非第一位置的索引列
	已有INDEX(a,b,c)
	条件为
	a
	a,b
	a,b,c 都可使用索引
	但
	b
	c
	b,c 都不会使用索引
(2)对索引列运算
	mysql sql 中如果使用了 not in , (<> 不等于 !=) 这些不走索引;
	not in可以用 not exists替代 
    但是 < 小于 > 大于 <= >= 这个根据实际查询数据来判断,如果全盘扫描速度比索引速度要快则不走索引 。

在这里插入图片描述
【注意】
1、索引不会包含有null值的列,即复合索引中只要有一列含null值,那么此复合索引无效
2、可以对某列前多少字符进行索引,称短索引,可以提高查询速度,节省磁盘空间以及I/O操作
3、索引排序,where条件中若已用索引,orderby中的列不会使用索引的

参考文章

(很多地方照搬了,按照自己思路整理给自己看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值