本文主要介绍SparkSQL的优化器系统Catalyst,其设计思路基本都来自于传统型数据库,而且和大多数当前的大数据SQL处理引擎设计基本相同(Impala、Presto、Hive(Calcite)等),因此通过本文的学习也可以基本了解所有其他SQL处理引擎的工作原理。 SQL优化器核心执行策略主 ...
分类:
数据库 时间:
2018-03-18 20:05:41
阅读次数:
356
5.1 方式一:explain 筛选出有问题的 SQL,我们可以使用 MySQL 提供的 explain 查看 SQL 执行计划情况(关联表,表查询顺序、索引使用情况等)。 用法: 返回结果: 字段解释:1) id:select 查询序列号。id相同,执行顺序由上至下;id不同,id值越大优先级越高 ...
分类:
数据库 时间:
2018-03-15 16:26:51
阅读次数:
195
除了给table建立索引之外,保持良好的SQL语句编写。 1、通过变量的方式来设置参数 比如动态查询的时候,尽量这样写 数据库的SQL解析和执行会保存在缓存中,SQL只要有变化,就要重新解析。而"where p.id="+id的方式在id值发生改变得时候需要重新解析SQL,浪费时间。 2、尽量不要使 ...
分类:
数据库 时间:
2018-03-15 15:12:17
阅读次数:
209
一 、排查sql性能问题的步骤: 1:数据库总体的性能查询show 【session | global 】status like 'Com_%';session是默认值,表示当前连接。global:表示从上次启动到现在。Com xxx表示每个xxx语句执行的次数,我们通常比较关心的是以下几个统计参数 ...
分类:
数据库 时间:
2018-03-08 20:21:20
阅读次数:
209
==> 在内存中缓存数据 ---> 性能调优主要是将数据放入内存中操作 ---> 使用例子:// 从 Oracle 数据库中读取数据,生成 DataFrame
val oracleDF = spark.read
分类:
数据库 时间:
2018-03-08 10:35:45
阅读次数:
1075
1. 循环插入1到10w数值 2. 使用变量绑定,减少sql解析 3. 使用静态SQL,编译过程即完成解析,而动态SQL是在执行过程中解析的 4. 批量commit. 5. 写成一条sql,由原来过程一条一条插入,变成一个集合的概念,一整批写入DATA BUFFER区。 6. 直接路径方式插入数据, ...
分类:
数据库 时间:
2018-03-04 20:02:51
阅读次数:
207
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好... ...
分类:
数据库 时间:
2018-03-02 22:12:23
阅读次数:
192
(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。 需要按照顺序进行一级一级的筛选 (2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。 exists 条件 返回的 是boo ...
分类:
数据库 时间:
2018-03-01 11:42:03
阅读次数:
201
前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧。 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础。 优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作 ...
分类:
数据库 时间:
2018-02-25 14:34:26
阅读次数:
171