欢迎光临散文网 会员登陆 & 注册

黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mys

2023-08-07 12:56 作者:计算机小菜鸡11  | 我要投稿

存储引擎

存储引擎:基于表而非基于数据库,存储数据,建立索引,更新/查询等数据技术的实现方式。默认InnoDB

InnoDB:兼顾高可用性和高性能的通用存储引擎,

DML操作支持ACID特性:原子性,一致性,隔离性,持久性,支持行级锁,支持外键

逻辑存储结构:表空间,段,区,页,行


MyISAM:是早期默认存储引擎,

特点:

不支持事务,不支持外键

支持表锁,不支持行键

与InnODB区别:

不支持事务,

支持表锁,不支持行锁

不支持外键

索引基本概念

应用场景:InnoDB:对事物完整性有比较高的要求

B+树索引

Hash索引:哈希冲突,哈希碰撞,引入链表

支持引擎:Memory引擎

B+树:非叶子结点不存放数据,可以存储更多key,且会形成双向链表,便于排序

索引分类:

主键索引:默认自动创建,只能有一个,关键字:primary

唯一索引: 可以有多个

explain:

type:all代表全表扫描

ref:非唯一索引

const:唯一索引

index:对索引进行扫描,遍历索引树

索引使用

索引联系了多列:联合索引:

如果最左边的字段不存在:全部失效

如果不连续:部分失效

不要在索引列进行运算操作,否则运算会失效

字符串字段不加单引号,索引失效

如果仅仅是尾部模糊匹配,索引不会失效,否则会失效。

or连接的条件

用or分隔开的条件,如果or前的条件中的列有索引,而后面的没有索引,那么涉及到的索引都不会被用到

数据分布影响:走索引更慢则不走索引

范围查询:>不走索引,>=不走索引

SQL提示:在sql语句加入一些人为的提示

覆盖索引:尽量使用覆盖索引,不需要回表查询数据。

前缀索引:用于处理较长的字符串或者文本

单列索引和联合索引:设计多个查询条件,一般使用联合索引。联合索引排序会先按照第一个字段排序,再按照第二个字段排序。

SQL优化

insert插入优化:批量插入,手动提交数据,主键顺序插入。

大批量插入数据,使用MySQL数据库提供的 load指令进行插入

主键优化

页分裂:主键顺序插入,乱序插入可能会引发页分裂。

页合并:当页中删除的记录达到某个阈值,InonoDB会开始寻找最靠近的页看看是否可以将两个页合并以优化空间使用。

order by 优化:根据排序字段建立合适的索引,多字段索引,也遵循最左前缀法则

尽量使用覆盖索引

多字段排序,需要注意联合索引创建时的规则

如果不可避免出现filesort.可以适当增大sort_buffer_size(默认256)


count优化:没有很好的优化策略

count(主键):会遍历整张表,把每一行id值加起来,交给服务层直接累加,不需要判断

count(*):不取值,直接累加

count(字段):取值判断,然后再累加

count(1):和上一种性能差不多。

update语句:如果更新字段是索引字段,则会增加行锁,否则会增加表锁,降低并发性能。




黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mys的评论 (共 条)

分享到微博请遵守国家法律