mysql执行计划

Hive配置Mysql作为外置存储引擎(配置MySql的metastore)

此生再无相见时 提交于 2019-11-28 03:47:36
Hive是什么? Hive是基于Hadoop之上的数据仓库; Hive是一种可以存储、查询、分析存储在hadoop中的大规模数据 Hive定义了简单的类SQL查询语言,成为HQL,它允许熟悉SQL的用户查询数据 允许熟悉 MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作 Hive没有专门的数据格式 Hive:数据仓库。 Hive:解释器,编译器,优化器等。 Hive运行时,元数据存储在关系型数据库里面。 1. 为什么选择 Hive 基于 Hadoop的大数据的计算/扩展能力 支持 SQL like查询语言 统一的元数据管理 简单编程 2.Hive内部是什么 Hive是建立在Hadoop上的数据仓库基础架构。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为QL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。 本质上讲, Hive是一个SQL解析引擎,Hive可以把SQL查询转换为MapReduce中的job来运行。Hive有一套映射工具

mysql研究跟进

大城市里の小女人 提交于 2019-11-28 03:35:54
count(1)对比 count(*) count(N),N指的是列的序列号,innodb引擎下一般为主键列;count(*),mysql优化器也会将统计列自动优化。所以日常使用区别不大 阿里规范里的【强制】不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的 标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。 说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行 order by 和 limit 一起使用陷阱 会引发数据丢失,处理方案:加一个唯一索引字段加入排序。 千万级数据量的表 limit查询优化 select id,title from table where id>=(select id from table order by id limit 90000,1) limit 10; select后只跟主键id,查询、排序字段用联合索引包涵,查询出ids再查所需记录。 联合查询 推荐使用显示内联,tmp中间表为on条件出来的表 in、exist 小表驱动大表?【待补充】 mysql位运算的使用 处理单个子段对应多个属性的场景,e.g:存多个角色、存多个状态等 field & #{val} ddl导致的慢sql?【待补充】 varchar

MySQL(面试题)

爷,独闯天下 提交于 2019-11-28 03:13:23
1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测. AAAA 和 AAAAB 的索引没有相关性. hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件

Mysql order by与limit混用陷阱

痴心易碎 提交于 2019-11-27 23:56:20
在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。 比如现在有一张user表,表结构及数据如下: 现在想根据创建时间升序查询user表,并且分页查询,每页2条,那很容易写出sql为:select * from user order by create_time limit pageNo,2; 在执行查询过程中会发现: 1、查询第一页数据时: 2、查询第四页数据时: user表共有8条数据,有4页数据,但是实际查询过程中第一页与第四页竟然出现了相同的数据。 这是什么情况?难道上面的分页SQL不是先将两个表关联查询出来,然后再排好序,再取对应分页的数据吗??? 上面的实际执行结果已经证明现实与想像往往是有差距的,实际SQL执行时并不是按照上述方式执行的。这里其实是Mysql会对Limit做优化,具体优化方式见官方文档:https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html 这个是5.7版本的说明,提取几个问题直接相关的点做下说明。

【03】MySQL:索引和执行计划

独自空忆成欢 提交于 2019-11-27 23:51:32
写在前面的话 啥是索引?以一本书为例,如果想要找到某一指定章节的某一小节,书薄还好,如果书厚,可能就会找的头皮发麻。于是引进了一个东西,叫做目录,让用户以更快的方式查找到自己所需要的东西。索引其实就类似一本书的目录。其存在的意义就是优化查询速度,所以在学习的时候,只要一直记住这个类比,就相对更容易理解一些。 关于索引 在索引中,常见的算法有:B 树,Hash,R 树,Full text,GIS 等。只需要记两三个即可。 其中最重要的就是 B 树索引,可再度分为:B- 树,B+ 树(在 > < like 等查找中性能更优),B* 树 目前最多的就是 B+ 树,也是学习的重点,可将其结构类比于树的:根(Root),枝(Internal),叶(Leaf) 在功能上面,索引可分为: 辅助索引和聚集索引 树状结构如图(图片来自互联网): 辅助索引创建 B 树过程: 当执行创建索引操作:alter table t1 add index idx(id); 1. 提取索引列(id 列)的值,进行排序。 2. 向叶子节点申请数据页(16K),然后将排序后的值存储到叶子节点的数据页中,并和真实数据进行关联。 3. 向枝节点和根节点申请数据页,将下层中单页最小值存储进去。 整个结构类似一本书目录,叶节点类似一章中某一节的某个小标题,枝节点类似一个小结,根节点类似一大章。 聚集索引创建 B 树过程:

MySQL 性能优化

a 夏天 提交于 2019-11-27 22:18:03
1. SQL语句优化 1.1 Sakila示例数据库安装 Sakila 数据库是 MySQL 官方提供的示例数据库,常用来做测试。 https://dev.mysql.com/doc/sakila/en/sakila-installation.html 1、下载 sakila database : https://dev.mysql.com/doc/index-other.html 2、解压后会得到三个文件: sakila-schema.sql :用于创建表结构和数据库 sakila-data.sql :用于插入数据 sakila.mwb 3、进入 MySQL 中,创建数据库、数据表以及插入数据: # 将路径替换成你自己的路径 mysql -u root -p # 创建表结构 source C:/Users/hj/Desktop/sakila-db/sakila-db/sakila-schema.sql # 插入数据 source C:/Users/hj/Desktop/sakila-db/sakila-db/sakila-data.sql 1.2 慢查询 如何发现有问题的 SQL?使用 mysql 慢查询日志对有效率问题的 SQL 进行监控: # 查看慢查询日志是否开启,off 为关闭 show variables like 'slow_query_log'; # 查看 log

MySQL统计信息简介

霸气de小男生 提交于 2019-11-27 21:51:22
作者:王小龙@网易乐得DBA 原文地址: http://mp.weixin.qq.com/s/698g5lm9CWqbU0B_p0nLMw MySQL执行SQL会经过SQL解析和查询优化的过程,解析器将SQL分解成数据结构并传递到后续步骤,查询优化器发现执行SQL查询的最佳方案、生成执行计划。查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7中innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。 一、非持久化统计信息 非持久化统计信息存储在内存里,如果数据库重启,统计信息将丢失。有两种方式可以设置为非持久化统计信息: 1 全局变量, INNODB_STATS_PERSISTENT=OFF 2 CREATE/ALTER表的参数, STATS_PERSISTENT=0 非持久化统计信息在以下情况会被自动更新: 1 执行ANALYZE TABLE 2 innodb_stats_on_metadata=ON情况下,执SHOW TABLE STATUS, SHOW INDEX, 查询 INFORMATION_SCHEMA下的TABLES, STATISTICS 3 启用--auto-rehash功能情况下,使用mysql client登录 4 表第一次被打开 5 距上一次更新统计信息,表1/16的数据被修改

MySQL 索引

▼魔方 西西 提交于 2019-11-27 21:41:41
什么是索引   相当于书目录,用于快速检索   优点     提高数据检索效率     提高表间的JOIN效率     利用唯一性索引,保证数据的唯一性     提高排序和分组效率   缺点      消耗更多物理存储     数据变更时,索引也需要更新,降低更新效率   哪种情况下应该创建索引     经常检索的列     经常用于表连接的列     经常排序/分组的列   索引不使用建议     基数很低的列     更新频繁但检索不频繁的列     BLOB/TEXT 等长内容列     很少用于检索的列 二分查找   折半查找,binary search   一种在有序数组中查找某一特定元素的搜索算法   二分查找发的优点是比较次数少,查找速度快,平均性能好,其缺点是要求待查表为有序表,且插入删除困难,因此,二分查找法适用于不经常变动而查询频繁的有序列表 二叉树,binary tree   二叉树是每个节点至多只有二颗子树(不存在度大于2的节点),二叉树的子树有左右有序之分,次序不能颠倒。    平衡树,平衡二叉树, self-balancing binary search tree   改进的二叉查询树。一般的二叉查找树的查询复杂度是跟目标节点到树根的距离(即深度)有关,因此当节点的深度普遍较大时,查询的均摊复杂度会上升,为了更高效的查询,有了平衡树   平衡二叉树的特点

MySQL

烂漫一生 提交于 2019-11-27 21:03:59
1.1 mysql 架构   mysql 分为 server 层和存储引擎 1.1.1 server层 连接器:管理连接权限验证 查询缓存:命中缓存直接换回查询结果 分析器:分析语法 优化器:生成执行计划,选择索引 执行器:操作索引返回结果 1.1.2 存储引擎 存储引擎负责数据的存储和提取;其架构是插件式的。innodb 在 mysql5.5.5 版本开始成为 mysql 默认存储引擎。 各存储引擎比对: InnoDB:支持事务,支持外键,InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据,不支持全文索引。 MyISAM:不支持事物,不支持外键,MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的,查询效率上 MyISAM 要高于 InnnDB ,因此做读写分离的时候一般选择用 InnoDB 做主机,MyISAM 做从机 Memory:有比较大的缺陷使用场景很少;文件数据都存储在内存中,如果 mysqld 进程发生异常,重启或关闭机器这些数据都会消失。 1.1.3 sql 的执行过程   第一步客户端连接上 mysql 数据库的连接器,连接器获取权限,维持管理连接;连接完成后如果你没有后续的指令这个连接就会处于空闲状态

Mysql监控调优

纵然是瞬间 提交于 2019-11-27 19:18:59
一、Mysql性能介绍 1、什么是Mysql?它有什么优点? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 Mysql是开源的,所以你不需要支付额外的费用。 Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 MySQL使用标准的SQL数据语言形式。 Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。 MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。 Mysql是可以定制的,采用了GPL协议,可以修改源码来开发自己的Mysql系统。 影响Mysql性能的原因总结一下 主要在下面这几点 服务器硬件 网卡流量 磁盘IO SQL查询速度 服务器硬件 CPU: 64位的CPU一定要工作在64位的系统下 对于并发比较高的 场景,CPU的数量比频率重要 对于密集型场景和复杂SQL,则CPU频率越高越好 内存: 选择主板所能使用的最高频率的内存