首页 > 数据库 >mysql语句的执行顺序

mysql语句的执行顺序

时间:2024-03-04 17:59:19浏览次数:300  
标签:语句 顺序 查询 索引 引擎 mysql 执行

一、sql执行的流程

1 mysql客户端发送查询请求到服务器。

2 mysql服务器接收请求并处理,mysql解析器解析查询语句,进行语法分析,确保查询语句符合mysql的语法要求。

3 mysql的查询优化器对sql语句进行优化处理(选择最合适的索引,或使用其它技术来提高性能),生成执行计划。

4 mysql执行引擎根据执行计划来调用存储引擎来获取数据(执行引擎与存储引擎之间通过api接口调用通信,存储引擎提供数据),常见的存储引擎有InnoDB,MyISAM。Mysql从5.5开始使用InnoDB作为默认存储引擎。

二、sql语句的执行顺序

1 from  <left_table> 定位到具体的table

2 on <join_condition>

3 <join_type> join <right_table>

4 where <where_condition>

在当前应用WHERE过滤器时,有两种过滤是不被允许的:

  • 由于数据还没有分组,因此现在还不能在WHERE过滤器中使用where_condition=MIN(col)、MAX(col)、SUM(col)等这类聚集函数
  • 由于没有进行列的选取操作(where执行顺序在select之前),因此在WHERE 中使用列的别名也是不被允许的,如SELECT city as c FROM t WHERE c='ShangHai'是不允许出现的

5 group by <group_by_list>

6 with 一般不用

7 having <having_condition>

8 select 

9 distinct

10 order by

11 limit

三、单表查询的过程

例:select * from t_user where username = "沉香";

先判断username上是否有索引,若无索引,则去聚集索引进行全表查询;若有索引,则利用索引查询。利用索引时还需判断是否是覆盖索引,是的话直接返回数据,不是的话回表走聚集索引查询数据。

标签:语句,顺序,查询,索引,引擎,mysql,执行
From: https://www.cnblogs.com/mydesky2012/p/15699827.html

相关文章

  • Ubuntu安装zabbix,初始化数据库报没有这个文件 /usr/share/doc/zabbix-sql-scripts/mys
    报错信息如下: 解决方法:1、先查看是否安装了zabbix-server-mysql,我这里是已经安装过了,但是初始化还是报错找不到文件 2、去zabbix下载对应版本的源码,然后进行手动安装下载链接:https://www.zabbix.com/download_sources#60LTS 3、源码下载后解压,在database文件中找到m......
  • Mysql基本语法笔记
    DDL--操作数据库1.查询SHOWDATABASES;2.创建CREATEDATABASE数据库名称CHARACTERSETutf8;如果不存在创建CREATEDATABASEIFNOTEXISTS数据库名称;3.删除DROPDATABASE数据库名称;如果存在删除DROPDATABASEIFEXISTS数据库名称;4.使用数据库查看当前数......
  • docker环境部署容器之间互通:Hyperf+MySQL
    在docker中要使Hyperf和Mysql网络互通,则需要在创建相应容器的时候指定共享网络,步骤如下:一、首先我们指定共享网络dockernetworkcreate--subnet172.18.0.1/16test  //整条命令复制执行就行不用改这个ip二、创建hyperf命令dockerrun--namehyperf-vD:\hyperf202......
  • MySQL index and dead lock
    MySQL        Analyze:step1.Thread(test1)use"selectforupdate"lockcommonageindexinrange(10,30]step 2.Thread(test2)use"selectforupdate"lockcommonageindexinrange(40,60]step 3.Thread(test2)trytoi......
  • mysqldump: Error: Binlogging on server not active
    1.问题今天在备份数据库时遇到问题,提示二进制日志尚未开启,无法使用--master-data=2选项2.解决启用二进制日志记录,打开MySQL配置文件(通常是my.cnf或my.ini),添加以下选项即可。保存并重新启动MySQL服务器#开启二进制日志binloglog-bin=mysql-bin#开启Binlog一般只需......
  • switch 语句
    importjava.util.Scanner;publicclassday_3{publicstaticvoidmain(String[]args){//switch语句/*格式switch(表达式){case取值1:语句体;break;case取值2:......
  • MySQL 查找并删除重复行
    本文讲述如何查找数据库里重复的行。这是初学者十分普遍遇到的问题。方法也很简单。这个问题还可以有其他演变,例如,如何查找“两字段重复的行”(#mysqlIRC频道问到的问题)如何查找重复行第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一......
  • RDS for MySQL Serverless公测上线:弹性伸缩,最高可降成本超80%
    本文分享自华为云社区《RDSforMySQLServerless公测上线:弹性伸缩,最高可降成本超80%》,作者:GaussDB数据库。随着科技的快速发展,我们正在迅速步入一个全新的数字化时代。数字化时代,数据是最宝贵的资源。数据库作为存储数据的仓库,重要性更是不言而喻。一、业务背景及痛点为了确......
  • mysql安装
    一、环境配置检测系统是否自带Mysql#rmp-qa|grepmysql如果有进行强行卸载#rpm-e--nodepsmysql-libs-5.1.52-1.el6_0.1.x86_64检测系统是否自带mariadb#rpm-qa|grepmariadb#rpm-e--nodepsmariadb-libs-5.5.64-1.el7.x86_64#rpm-e--nodepsmariadb-5.5.64-1.el7......
  • MySQL查看执行慢的SQL语句(慢查询)
    更新日志点击查看2024年3月4日发布。慢查询日志查看执行慢的SQL语句,需要先开启慢查询日志。MySQL的慢查询日志,记录在MySQL中响应时间超过阀值的语句(具体指运行时间超过long_query_time值的SQL。long_query_time的默认值为10,意思是运行10秒以上(不含10秒)的语句)。......