MySQL执行SQL会经过SQL解析和查询优化的过程,解析器将SQL分解成数据结构并传递到后续步骤,查询优化器发现执行SQL查询的最佳方案、生成执行计划。...查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7中innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。...有两种方式可以设置为非持久化统计信息: 1 全局变量, INNODB_STATS_PERSISTENT=OFF2 CREATE/ALTER表的参数, STATS_PERSISTENT=0 非持久化统计信息在以下情况会被自动更新...查看t1表的统计信息,需主要关注stat_name和stat_value字段 ?...了解了stat_name和stat_value的具体含义,就可以协助我们排查SQL执行时为什么没有使用合适的索引,例如某个索引n_diff_pfxNN的stat_value远小于实际值,查询优化器认为该索引选择度较差
作者:王小龙@网易乐得DBA 原文地址: http://mp.weixin.qq.com/s/698g5lm9CWqbU0B_p0nLMw MySQL执行SQL会经过SQL解析和查询优化的过程,解析器将...SQL分解成数据结构并传递到后续步骤,查询优化器发现执行SQL查询的最佳方案、生成执行计划。...查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7中innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。...查看t1表的统计信息,需主要关注stat_name和stat_value字段 ?...了解了stat_name和stat_value的具体含义,就可以协助我们排查SQL执行时为什么没有使用合适的索引,例如某个索引n_diff_pfxNN的stat_value远小于实际值,查询优化器认为该索引选择度较差
3、MyBatis 框架的缺点: 1、 SQL 语句的编写工作量较大, 尤其当字段多、 关联表多时, 对开发人员编 写 SQL 语句的功底有一定要求。...7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 第 1 种 : 通过在查询的 sql 语句中定义字段名的别名 , 让字段名的别名和实体类 的属性名一致。...–用 result 属性来映射非主键字段,property 为实体类属性名,column 为数据表中的属性–> 名 ,就是映射文件中的 namespace 的值 ; 接口的方法名, 就是映射文件中 Mapper 的 Statement 的 id 值; 接口方法内的 参数, 就是传递给 sql 的参数。...mapper 中如何传递多个参数?
右外关联(RIGHT [OUTER] JOIN) 和左外关联相反,以RIGTH [OUTER] JOIN关键词后⾯的表作为主表,和前⾯的表做关联,返回记录数和主表⼀致,关联不上的字段为NULL。...遍历AST,⽣成基本查询单元QueryBlock.QueryBlock是⼀条SQL最基本的组成单元,包括三个部分:输⼊源,计算过程,输出....Impala 和 hive 的查询有哪些区别 Impala是基于Hive的⼤数据实时分析查询引擎,直接使⽤Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore...与MapReduce相⽐:Impala把整个查询分成⼀执⾏计划树,⽽不是⼀连串的MapReduce任务,在分发执⾏计划后,Impala使⽤拉式获取 数据的⽅式获取结果,把结果数据组成按执⾏树流式传递汇集...5、通过选择合适的数据存储格式可以得到最好的性能(Impala⽀持多种存储格式)。 6、最⼤使⽤内存,中间结果不写磁盘,及时通过⽹络以stream的⽅式传递。
与 Hive相⽐:Impala把整个查询任务转为 ⼀棵执⾏计划树,⽽不是⼀连串的MR任务,在分发执⾏计划后,Impala使⽤拉取的⽅式获取上个 阶段的执⾏结果,把结果数据、按执⾏树流式传递汇集,减少的了把中间结果写...* 优秀的IO调度,Impala⽀持直接数据块读取和本地代码计算。 * 选择适合的数据存储格式可以得到最好的性能(Impala⽀持多种存储格式)。...* 尽可能使⽤内存,中间结果不写磁盘,及时通过⽹络以stream的⽅式传递。 * Impala与Hive对⽐分析 查询过程 * Hive:在Hive中,每个查询都有⼀个“冷启动”的常⻅问题。...通常使⽤Impala的⽅式是数据⽂件存储在Hdfs⽂件系统,借助于Impala的表定义来查询和管理 Hdfs上的数据⽂件; 3....impala-shell后 ⾯执⾏的时候可以带很多参数。你可以在启动 impala-shell 时设置,⽤于修改命令执⾏环境。 impala-shell –h可以帮助我们查看帮助⼿册。
procedure status; 调用 call 名称(); 图片 删除 drop procedure if exists 名称; 3、存储过程中的变量 变量的种类和定义 在 SQL 中变量分为两种...: ① 系统变量:@@ ② 自定义变量:@ 图片 存储过程是可以编程的,意味着可以使用变量、表达式、控制结构,在存储过程中,声明变量用 declare 格式:declare 变量名 变量类型 【default...; else if 条件 then sql 语句; else sql语句; end if 图片 存储过程中的参数传递 为了让存储过程更加灵活,可以传递参数,参数分为三种: ① in:参数作为输入...所谓定时器,就是定时地去运行指定的函数和代码,MySQL 的定时器就是 MySQL 的事件。 在开发过程中经常会遇到这样一个问题:每天或每月需定时去执行一条 SQL 语句或更新或删除数据。...例如每分钟执行 100w 行数据,那这个会有问题,如果实在是需要那这个时候可以使用行锁、表锁来进行 8、事件⽆法传递参数,但是可以用事件里面的参数使用存储过程 定时器可以结合存储过程 现在用定时器,就可以在数据层面操作
需求背景 我们在写存储过程的时候,可能会出现下列⼀些情况: 1. 插⼊的数据违反唯⼀约束,导致插⼊失败 2....准备数据 创建库:javacode2018 创建表:test1,test1表中的a字段为主键。...外部异常 当我们执⾏⼀个update的时候,可能我们期望影响1⾏,但是实际上影响的不是1⾏数 据,这种情况:sql的执⾏结果和期望的结果不⼀致,这种情况也我们也把他作为外部异 常处理,我们将sql执⾏结果和期望结果不...Mysql内部异常 示例1 test1表中的a字段为主键,我们向test1表同时插⼊2条数据,并且放在⼀个事务 中执⾏,最终要么都插⼊成功,要么都失败。...,然后调⽤存储过程proc1,由于test1表中的a字 段是主键,插⼊第⼆条数据时违反了a字段的主键约束,mysql内部抛出了异 常,导致第⼆条数据插⼊失败,最终只有第⼀条数据插⼊成功了。
字段的自述名 每个字段类型都接受一个可选的位置参数——字段的自述名,如果没有给定自述名, Django将根据字段的属性名称自动创建自述名——将属性名称的下划线替换成空格 ForeignKey、 ManyToManyField...一个模型的数 -据库表名称,由这个模型的“应用名” 和模型类名称之间加上下划线组成。 使用Meta类中的 db_table 参数来重写数据表的名称。...migrate, 负责执行迁移, 以及撤销和列出迁移的状态。...过滤器基于所给的参数限制查询的结果。 从SQL 的角度,查询集和SELECT 语句等 价,过滤器是像WHERE 和LIMIT 一样的限制子句。 你可以从模型的管理器那里取得查询集。...每个元组包含传递给 values_list()调用的字段的值 —— 所以第一个元素为第一个字段,以此类推。
通过选择合适数据存储格式可以得到最好性能(Impala支持多种存储格式)。最大使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。...由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。...Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。...如果建表时没有指定存储类型,默认采用未压缩的text,字段由ASCII编码的0x01字符串分割能如果使用了LZO压缩,则只能通过Hive建表和插入数据。...Impalad服务由三个模块组成:Query Planner、Query Coordinator和Query Executor,前两个模块组成前端,负责接收SQL查询请求,解析SQL并转换成执⾏计划,交由后端执
命名规范: 库名、表名、字段名必须使用小写字母,并采用下划线分割。[FAQ-1-01] 库名、表名、字段名禁⽌超过 32 个字符。[FAQ-1-02] 库名、表名、字段名必须见名知意。...[FAQ-6-08] 禁止在主库上执⾏后台管理和统计类功能的 QUERY,必要时申请统计类从库。 程序应有捕获 SQL 异常的处理机制,必要时通过 rollback 显式回滚。...FAQ 和附录: 【FAQ-1-01】 库名、表名、字段名必须使⽤小写字母,并采⽤下划线分割。...a)MySQL 有配置参数 lower_case_table_names,不可动态更改,linux 系统默认为 0,即库表名以实际情况存储,⼤小写敏感。如果是 1,以⼩写存储,⼤小写不敏感。...【FAQ-3-01】 禁⽌使⽤分区表。分区表对分区键有严格要求;分区表在表变大后,执⾏行 DDL、SHARDING、单表恢复等都变得更加困难。
设置合适的字段属性:例如尽量把字段设置为 NOT NULL,这样引擎就不要对⽐NULL值。在表中建立索引,优先考虑where、group by使用到的字段。...尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描3 varchar 与 char 的区别是什么?大小限制?utf8 字符集下 varchar 最多能存多少个字符?...索引可以降低服务需要扫描的数据量,减少了I/O次数索引可以帮助服务器避免排序和使用临时表索引可以帮助将随机I/O转为顺序I/O5 sql 注入是怎么产生的,如何防止?...sql 注⼊产⽣原因:因为在程序开发过程中没有对 sql 语句进行检查或未进行关键字检查,导致客户端可以提交 sql 语句到服务器运行。如何防止:对 sql 与进行检查,过滤。...一般来说,肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降),等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再重新跑这些 SQL。
以MyBatis为例,我们可基于MyBati s插件机制实现分⻚、分表,监控等功能。由于插件和业务⽆关,业务也⽆法感知插件的存在。因此可以⽆感植⼊插件,在⽆形中增强功能。...我们在执⾏SQL时,需要先通过DefaultSqlSessionFactory创建 SqlSession。...⾃定义插件 插件接口 Mybatis 插件接⼝-Interceptor Intercept⽅法,插件的核⼼⽅法 plugin⽅法,⽣成target的代理对象 setProperties⽅法,传递插件所需参数...⾸先,invoke⽅法会检测被拦截⽅法是否配置在插件的@Signature注解中,若是,则执⾏插件逻辑,否则执⾏被拦截⽅法。...插件逻辑封装在intercept中,该⽅法的参数类型为Invocationo Invocation主要⽤于存储⽬标类,⽅法以及⽅法参数列表。
存储过程分类 存储过程的参数类型可以是IN、OUT和INOUT。...(有参数有返回) 注意:IN、OUT、INOUT 都可以在一个存储过程中带多个。...c.创建存储过程 语法 CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,…) [characteristics …] BEGIN 存储过程体 END...默认情况下,系统会指定为CONTAINS SQL。 SQL SECURITY { DEFINER | INVOKER } :执行当前存储过程的权限,即指明哪些用户能够执 行当前存储过程。...存储过程体中可以有多条 SQL 语句,如果仅仅一条SQL 语句,则可以省略 BEGIN 和 END 编写存储过程并不是一件简单的事情,可能存储过程中需要复杂的 SQL 语句。
,将接收到的sql语句通过SQL接⼝响应给查询解析器, 查询解析器将sql按照sql的语法解析出查询哪个表的哪些字段,查询条件是啥; 再通过查询优化器处理,选择该sql最优的⼀套执⾏计划,然后执⾏器负责调...⽤存储引擎的⼀系列接⼝,执⾏该计划⽽完成整个sql语句的执行,如下图所示: ?...InnoDB存储引擎-缓冲池中完成更新的基本操作 具体执⾏这些执⾏计划得要存储引擎来完成,比如⾸次更新users表中id=10的这条数据,缓冲池中⼀开始肯定没有该条数据的, 得要先从磁盘中将被更新数据的原始数据加载到缓冲池中...接着将更新前的值先备份写⼊到undo log中(便于事务回滚时取旧数据),⽐如update语句即存储被更新字段之前的值。...undo log和redo log是mysql中InnoDB存储引擎的基本组成: (1)undo log保存了事务执⾏前数据的值,以便于事务回滚时能回到事务执⾏前的数据版本,多次更 新会有undo log
ODP 组件 obproxy_digest.log:审计⽇志,记录执⾏失败的 SQL 语句、执行时间大于参数 query_digest_time_threshold 阈值(默认是 2ms)请求。...obproxy_slow.log:慢 SQL 请求日志,记录执⾏时间大于参数 slow_query_time_threshold 阈值(默认是 500ms)的请求。...从上面的原理可以看出,后三项时间相加并不等于第一项时间,比如 ODP 处理总时间比较长,但是预处理时间和 OBServer 执行时间都很短,有可能时间消耗在 OBServer 将第一条记录返回给 ODPServer...表的路由选择 在 OceanBase 数据库中,有 Local 计划、Remote 计划和 Distributed 计划三种表路由。Local 计划、Remote 计划均为单分区的路由。...拿到 SQL 文本后,再通过 Explain 查询计划进⾏分析(例如对下文语句进⾏ Explain 分析,比如 name 中只有表名不包含索引列的话,则该 SQL 语句可能使用的主键或全表扫描)。
函数和存储过程 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,调用存储过程和函数可以简化应用开发工作,提高数据处理的效率。...类型参数可以接收变量也可以接收常量,传入的参数在存储过程内部使用即可,但是在存储过程内部的修改无法传递到外部。...INOUT 类型参数同样只能接收一个变量,但是这个变量可以在存储过程内部使用。在存储过程内部的修改也会传递到外部。...支持外键、事务、事务回滚 表字段和索引同存储在一个文件中 表名.frm :表结构 表名.ibd : 表记录及索引文件 MyISAM 支持表级锁,在锁定期间,其它进程无法对该表进行写操作。...如果你是写锁,则其它进程则 读也不允许 表字段和索引分开存储 表名.frm :表结构 表名.MYI : 索引文件 (my index) 表名.MYD : 表记录 (my data) 如何选择存储引擎 执行查操作多的表用
ODP 组件 obproxy_digest.log:审计⽇志,记录执⾏失败的 SQL 语句、执行时间大于参数 query_digest_time_threshold 阈值(默认是 2ms)请求。...obproxy_slow.log:慢 SQL 请求日志,记录执⾏时间大于参数 slow_query_time_threshold 阈值(默认是 500ms)的请求。...从上面的原理可以看出,后三项时间相加并不等于第一项时间,比如 ODP 处理总时间比较长,但是预处理时间和 OBServer 执行时间都很短,有可能时间消耗在 OBServer 将第一条记录返回给 ODPServer...表的路由选择 在 OceanBase 数据库中,有 Local 计划、Remote 计划和 Distributed 计划三种表路由。Local 计划、Remote 计划均为单分区的路由。...文本后,再通过 Explain 查询计划进⾏分析(例如对下文语句进⾏ Explain 分析,比如 name 中只有表名不包含索引列的话,则该 SQL 语句可能使用的主键或全表扫描)。
可以防 止sql注 入攻击, 而且执 行行sql语句句的效率 比Statement 高,因为sql语句句被预编译并且存储在 PreparedStatement 对象中,可以传 入不不同的参数值实现多次利利...2 说 一下数据库的触发器 和存储过程: 触发器 对 一张表做增删改的时候触发对其他表的操作,在现在的系统中很少 用,因为系统数据库的迁移要重写触发器 ,所以放在业务层做,执 行行多条sql语句句要 用到事务...;存储过程是数据库中的 一段代码,就是 一组为了了完成特定功能的SQL 语句句集,与触发器 的不不同是需要经过调 用才能 用。...3 数据库中的inner join 和left join left join(左联接) 返回左表中的所有记录和右表中与左表联结字段相等的记录 right join(右联接) 返回右表中的所有记录和左表中与右表联结字段相等的记录...get是 用来从服务器 上获得数据,post是 用来向服务器 上传递数据。 get将表单中数据的按照变量量名=值的形式添加到URL后 面,使 用“?”
MyBatis和数据库的交互有两种⽅式: 使⽤传统的MyBatis提供的API ; 使⽤Mapper代理的⽅式 数据处理层:负责具体的SQL查找、SQL解析、SQL执⾏和执⾏结果映射处理等。...),—个是java代码中的注解,将主配置⽂件内容解析封装到Configuration,将sql的配置信息加载成为⼀个mappedstatement对象,存储在内存之中。...接收调⽤请求 触发条件:调⽤Mybatis提供的API 传⼊参数:为SQL的ID和传⼊参数对象 处理过程:将请求传递给下层的请求处理层进⾏处理。...处理操作请求 触发条件:API接⼝层传递请求过来 传⼊参数:为SQL的ID和传⼊参数对象 处理过程: (A) 根据SQL的ID查找对应的MappedStatement对象。...(B) 根据传⼊参数对象解析MappedStatement对象,得到最终要执⾏的SQL和执⾏传⼊参数。 © 获取数据库连接,根据得到的最终SQL语句和执⾏传⼊参数到数据库执⾏,并得到执⾏结果。
数据库性能会跟许多部分有关联,从硬件底层存储设备、操作系统、数据库配置参数、数据库架构、数据库表结构、应用层面的连接池设置、以及SQL索引等。...2 性能分析基本监控指标 了解了mysql系统架构和mysql执行过程还不够,在进行性能分析时,需要找出mysql的问题所得先了解一些基础知识和相应的监控工具。...执行explain 在sql分析时出现Using temporary的状态,这意味着查询过程中需要创建临时表来存储中间数据,我们需要通过合理的索引来避免它。...也可以把分析结果输出到文件中,或则把文件写到表中。分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。...(project_id); ALTER table tableName ADD INDEX indexName(columnName) create index 索引名 on 表名(字段名1,字段名2
领取专属 10元无门槛券
手把手带您无忧上云