mysql 原理 ~ sql执行】的更多相关文章

一 普通sql执行的具体过程1 连接器  管理连接,权限验证2 分析器  词法分析,语法分析   比如 数据表和数据列是否存在, 别名是否有歧义,是否符合标准sql语法等3 优化器检测   执行计划生成,索引选择4 执行器   1 判断是否拥有操作权限->这里包含更为复杂的权限验证,比如触发器,存储过程等   2 执行sql,返回结果集到客户端5 存储引擎层  存储引擎层提供和server端进行交互的读写接口,存储真正的数据注意   1 本文不考虑查询缓存的情况,因为现在线上数据库都建议关闭查询…
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的执行计划: mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询. 将结果返回给客户端.详见:http://student-lp.iteye.com/blog/2152601 ==============================华丽丽的分割线==================…
概述 一般我们在对mysql数据库做优化,肯定需要对慢sql去做分析才能开始优化,那么有什么分析的方法呢?下面通过对sql执行时间和执行情况来做分析. 一.SQL 执行时间分析 通过找到执行时间长的 SQL 语句,可以直观的发现数据层的效率问题. 1.通过 show processlist 来查看系统的执行情况 mysql> show processlist; 2.通过 profiling 来进行查看 这个命令是查看 SQL 的执行时间,能很直观的看出快慢. 2.1 查看 profiling 是…
在上一篇文章<MySQL常见加锁场景分析>中,我们聊到行锁是加在索引上的,但是复杂的 SQL 往往包含多个条件,涉及多个索引,找出 SQL 执行时使用了哪些索引对分析加锁场景至关重要. 比如下面这样的 SQL: mysql> delete from t1 where id = 1 or val = 1 其中 id 和 val 都是索引,那么执行时使用到了哪些索引,加了哪些锁呢?为此,我们需要使用 explain 来获取 MySQL 执行这条 SQL 的执行计划. 什么是执行计划呢?简单来…
对数据库基本操作是每个程序员基本功,如何理解并快速记住sql执行的顺序呢,其实一条复杂的sql就能搞定: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <h…
在select窗口中,执行以下语句: set profiling =1; -- 打开profile分析工具show variables like '%profil%'; -- 查看是否生效show processlist; -- 查看进程use cmc; -- 选择数据库show PROFILE all; -- 全部分析的类型show index from t_log_account; ##查看某个表的索引show index from t_car_copy; ##查看某个表的索引-- 使用ex…
以前没有怎么了解mysql执行计划,以及sql 优化方面,今天算学习了. https://blog.csdn.net/heng_yan/article/details/78324176 https://www.zhihu.com/question/50171821 EXPLAIN select * from user EXPLAIN 的使用方式: https://www.cnblogs.com/gomysql/p/3720123.html…
mysql系统变量分为全局变量和会话变量,全局变量的修改影响到整个服务器,会话变量修改只影响当前的会话. 查看log日志是否开启 show variables like 'general_log' set GLOBAL general_log='ON'; SET GLOBAL general_log_file = '/tmp/mysql.log' 不使用的时候记得关掉,否则会大量占用磁盘空间. show processlist命令查看了当前正在执行的sql语句,同时可以查看用户的当前连接 查看慢…
实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写sql语句的时候就很少考虑到性能的问题.但是当数据规模增大,如千万.亿的时候,我们运 行同样的sql语句时却发现迟迟没有结果,这个时候才知道数据规模已经限制了我们查询的速度.所以,查询优化和索引也就显得很重要了. 问题: 当我们在查询前能否预先估计查询究竟要涉及多少行.使用哪些索引.运行时间呢?答案…
实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写sql语句的时候就很少考虑到性能的问题.但是当数据规模增大,如千万.亿的时候,我们运 行同样的sql语句时却发现迟迟没有结果,这个时候才知道数据规模已经限制了我们查询的速度.所以,查询优化和索引也就显得很重要了. 问题: 当我们在查询前能否预先估计查询究竟要涉及多少行.使用哪些索引.运行时间呢?答案…