1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论

数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论

时间:2023-08-24 06:16:39

相关推荐

数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论

mysql的逻辑分层:连接层 服务层 引擎层 存储层

引擎层主要分为两类:InnoDB、MyIsam(使用show engines;查看)

InnoDB是事务优先的,会进行行锁,适合高并发操作

MyIsam是性能优先的,进行表锁

sql优化点:等待时间长,执行时间长,性能低下,多表连接查询,服务器参数设置不合理(线程数、缓冲区)

编写过程 select ... from ... join... on ... where ... group by ... having... order by...

解析过程 from ... on ... join... where ...group by... having...select... order by...

具体内容可以看步步深入:MySQL架构总览->查询执行流程->SQL解析顺序 - AnnsShadoW - 博客园​

sql优化主要是优化索引,索引是一个高效查询数据的数据结构,索引一般是一颗树(树:b树或者hash树等)示例如下。

索引的弊端也是有的:索引本身需要空间可以存放内存或者硬盘内部;索引在有的情况下不适用:数据量少,频繁更新的数据,很少使用的字段,索引会提高查询但是减低增删改效率(但是数据库的大部分操作是查询,增删改较少)。

优势:提高查询效率(降低IO使用率)、降低CPU使用率(...order by xx desc,直接在B树排好了)。

B树在磁盘中的结构是怎么样的呢?

三层Btree可以存放上百万条数据,每一层可以超过两个分支。B树一般是值B+树,数据全部放到叶节点中,B+树中查询任意数据都是n次(n为树的高度)。

B树与B+树的区别,可以看以下文章/login_sonata/article/details/75268075​

索引的分类:单值索引(单列,一个表可以有多个单值索引)、唯一索引(不能重复)、复合索引(多个列构成的索引,符合索引不一定是多个列全中)。

第一种

# 单值索引 create 索引类型 索引名 on 表(字段)

create index dept_index on tb(dept);

# 唯一索引

create unique index name_index on tb(name);

# 复合索引

create index dept_name_index on tb(dept, name);

第二种

# alter table 表名 索引类型 索引名(字段)

# 单值索引

alter table tb add index dept_index(dept);

# 唯一索引

alter table tb add unique index name_index(name);

# 符合索引

alter table tb add index dept_name_index(dept, name);

事务操作只对DML增删改有效,DDL会自动提交。

主键索引是唯一索引的一种,但是主键索引不能为null。

删除索引

drop index 索引名 on 表名

drop index name_index on tb;

SQL优化问题

1、分析SQL的执行计划:explain。可以模拟SQL优化器优化SQL执行语句。

2、mysql查询自动优化,会干扰优化。

explain一般返回这么几个字段:id,select_type,type

不过SQL执行计划不同版本不一样,看具体版本,不用纠结。

这里用explain返回结果时,id越大越先执行(本质是嵌套查询),id相同时,顺序执行。

select_type:primary(主查询)、subquery(子查询)、simple(简单查询,不包含子查询和union)、derived(衍生查询,用到了临时表。在from子查询中只有一张表,或者union前一个查询)

type:索引类型

一般system > const > eq_ref > ref > range > index > all性能依次降低,实际能达到ref > range即可。前提是必须建立索引。

这个理解即可。

eq_ref:查询结果1v1;ref:查询结果1vN(N>=0);range(where between,<=, >=,in等),其中in在查询数据在一半以上时,退化为all或index。尽量避免使用in;index:查某一索引字段的;all:全表所有字段或者没有索引的字段。

下期讲索引优化方案。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。