现在的工作环境跟MySQL打的交道比较多,把平时工作中遇到的有意思SQL的部分总结一下.
知识来源:看书,工作总结,官方文档...
从哪开始呢,先从基本结构开始吧:ok let's go.
1:先看MySQL整体模块图:
(图片取自MySQL核心技术)
从图中可以看出MySQL的模块职责分工明确,不愧是Monty团队20年的结晶.好产品是靠持续的汗水浇灌的啊(扯远了)。。。
其中MySQL语句大概分两种:SQL和命令
SQL无非就是DDL,DML,命令是mysql自身语法如:show [table,process,database,index] , source ...等等.
用一条DML为例,连接管理器模块,线程模块,权限模块职责很明确此处略.
第一步由Commander Dispatcher(命令)模块统一接受处理,
1)如果开启全查询日志(是log 不是slow-low),会记录所有的语句(包括错误语句)
2)如果开启查询缓存(query_cache_type=1)会先判断语句是否可缓存,如果可以使用语句和客户端信息等的hash值查询query cache模块 如果找到数据短路.
第二步将语句转交parser模块进行解析,并发送给不同模块(优化器,表修改模块,表维护模块,复制模块,状态模块等)
其中最重要的是优化器模块,这个是所有数据库的核心,所有的DML都经过它完成
(这个后面的文章做进一步总结和学习,sql的快与慢全靠他.)
第三步假如进入优化器模块:MySQL的优化器的只定义了抽象存储引擎(Handler)
具体实现由存储引擎完成(mysql的插件引擎特性)
第四步进入存储引擎内部完成具体的数据读取和修改,内部有很复杂的处理流程和日志体系(如:innodb buffer_pool,redo,undb等..).
第五步返回数据,如果开启查询缓存会做尝试做缓存.最后完成清理工作,回收线程.
这里非常粗粒度的介绍的MySQL模块见的相互配合完成sql的过程,具体流程比这复杂的多,正在看书并结合源码研究中。。
简单语句流程到这里,MySQL下面看看另一张关注parser, optimizer的流程图
(图片取自高性能MySQL)
这张图更能体现sql的一些解析处理和优化过程.
这里有个问题需要介绍以下MySQL没有全局sql字节码缓存,所有的语句都要解析成语法树.
如果使用PrepareStatement的机制发送SQL 则mysql只在当前session支持预编译
官方解释如下:
http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html
这里和Oracle由很大不同,也就是说你没有使用变量绑定,MySQL也不会像Oracle那样迅速被拖慢...
mysql有SQL服务器模式,通过sql-mode参数体现.
可以随时更改自己的会话 sql_mode值
主要sql_mode取值如下:
· ANSI:
· STRICT_TRANS_TABLES:
·TRADITIONAL
·ALLOW_INVALID_DATES
·ANSI_QUOTES
·ERROR_FOR_DIVISION_BY_ZERO
·HIGH_NOT_PRECEDENCE
查看官方文档解释:
http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#server-sql-mode
你在mysql中遇到不一致的sql执行结果时,记得看看你session的sql_mode
开始部分只是粗粒度介绍下MySQL 关于sql的地方,后面会陆续把sql执行细节,优化过程和工作中的问题拿出来分享一下,希望与各位交流讨论.
- 大小: 94.7 KB
- 大小: 300.2 KB
分享到:
相关推荐
这时,可以使用如`mss2sql.rar`这样的工具,它通常能帮助用户自动化地将MySQL的表结构、数据、视图、存储过程等对象转换为SQL Server兼容的脚本,从而实现迁移。 转换过程一般包括以下步骤: 1. 数据库对象分析:...
本文档是有关于MySQL的最常用的sql语句,非常的方便查询和复习
总结起来,SQLDeveloper工具结合MySQL和SQL Server驱动,为数据库管理员和开发人员提供了强大的跨平台数据库管理能力。它简化了数据迁移过程,促进了不同数据库系统之间的数据交换,同时保持了高效的性能和直观的...
总结来说,连接MySQL和SQL Server的两个数据库涉及的关键点包括: 1. 使用JDBC驱动程序(如mysql-connector-java和sqljdbc)。 2. 在Java代码中创建并管理两个数据库的连接。 3. 编写SQL语句进行数据操作。 4. 使用...
在MySQL数据库管理中,SQL查询的性能直接影响到系统的响应时间和资源消耗。通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 优化实战 #### 策略1:尽量全值匹配 全值...
常用mysql sql语句总结
MySQL是一种广泛使用的开源关系型数据库管理系统,而SQL Server则是Microsoft公司提供的商业级数据库解决方案。迁移过程涉及数据的转换、架构的适配以及查询语言的调整。主要步骤包括: 1. **数据备份**:在开始...
MySQL-SQL语法及其使用PPT:主要介绍了MySQL常用语法及其基础命令的使用,练习,总结齐全、概况精要
总结来说,从MySQL转换到SQL Server是一个复杂的过程,涉及多个层面,包括数据库结构、数据、存储过程、安全性和性能等方面。每个环节都需要细致的规划和严谨的操作,以确保迁移的成功。在实际操作中,可以借助各种...
在IT行业中,SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准编程语言,而MySQL则是一款广泛应用的开源关系数据库管理系统。JDBC(Java Database Connectivity)是Java平台中用于访问...
SQL注入攻击仍然是Web应用安全领域的一大威胁,尤其是对于那些使用MySQL等流行数据库的系统。通过深入了解SQL注入的工作原理,采取有效的预防措施,可以显著降低遭受此类攻击的风险。对于开发者而言,始终将安全编码...
总结来说,从MySQL到Oracle的数据迁移是一个涉及多个步骤的过程,需要正确配置和管理数据库环境,确保用户和表空间设置正确,并且使用像SQL Developer这样的工具来简化迁移。在迁移过程中遇到问题时,要逐一排查,如...
MySQL到SQL Server转换工具包是针对数据库管理员和开发人员的一款实用工具,它的主要功能是将MySQL数据库结构和数据无缝地迁移到SQL Server环境中。这样的转换对于那些需要在不同数据库系统间进行迁移或整合项目的...
本文将详细介绍在Navicat for MySQL中执行SQL脚本时需要注意的关键细节,帮助开发者更好地理解和掌握这一过程。 #### 二、Navicat for MySQL执行SQL脚本的基本流程 在Navicat for MySQL中执行SQL脚本通常包括以下...
总结,将SQL数据库的数据导入到MySQL数据库,涉及到多个环节,包括数据的导出、转换和导入,以及在此过程中需要注意的数据一致性、权限管理、备份恢复和性能优化。通过使用如`mss2sql`这样的专业工具,可以简化这个...
为了在 Java 程序中使用 MySQL 的 JDBC 驱动,首先需要添加 MySQL 的 JDBC 驱动到项目的类路径中。 #### 1.2 连接示例 ```java // 加载 MySQL 的 JDBC 驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 定义...
sql语句