当前位置: 首页 > news >正文

网站开发需要什么配置三维培训学费一般多少

网站开发需要什么配置,三维培训学费一般多少,动漫制作专业一定要艺术生吗,北京金山办公软件mysql中and的判断顺序 select * from a join b on 条件一 and 条件二条件一和二都是判断 id 字段#xff0c; 条件一和条件二哪个先执行#xff1f; 解析器会自动选择最优的流程执行的 这两个都是平级条件#xff0c;理论上是没有先后顺序的#xff01; 没有顺序#xff…mysql中and的判断顺序 select * from a join b on 条件一 and 条件二条件一和二都是判断 id 字段 条件一和条件二哪个先执行 解析器会自动选择最优的流程执行的 这两个都是平级条件理论上是没有先后顺序的 没有顺序解析器会自动判断 mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致 aa表 mysql select * from aa; ---------------------- | id | name | other | ---------------------- | 1 | asdf | dfdfd | | 2 | sdf | fdfd | | 3 | dfasdf | dfdasd | | 4 | fasdf | fdasd | | 5 | asdf | dasd | | 6 | bsdf | hell0 | ----------------------联合索引 mysql show index from aa; -------------------------------------------------------------------------------------------------------------------------------- | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | -------------------------------------------------------------------------------------------------------------------------------- | aa | 1 | aa_id_name | 1 | id | A | 2 | NULL | NULL | YES | BTREE | | | aa | 1 | aa_id_name | 2 | name | A | 2 | NULL | NULL | YES | BTREE | | --------------------------------------------------------------------------------------------------------------------------------执行计划 mysql explain select * from aa where id 5 and name asdf; ----------------------------------------------------------------------------------------------------------- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ----------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | aa | ref | aa_id_name,idx_id_name | aa_id_name | 24 | const,const | 1 | Using where | ----------------------------------------------------------------------------------------------------------- 1 row in set (0.02 sec)mysql explain select * from aa where name asdf and id 5; ----------------------------------------------------------------------------------------------------------- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ----------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | aa | ref | aa_id_name,idx_id_name | aa_id_name | 24 | const,const | 1 | Using where | ----------------------------------------------------------------------------------------------------------- 1 row in set (0.00 sec)总结不管where过滤条件中id在前还是name在前都是用了联合索引 mysql and 顺序_mysql执行过程以及顺序 前言:mysql在我们的开发中基本每天都要面对的,作为开发中的数据的来源,mysql承担者存储数据和读写数据的职责。因为学习和了解mysql是至关重要的,那么当我们在客户端发起一个sql到出现详细的查询数据,这其中究竟经历了什么样的过程mysql服务端是如何处理请求的,又是如何执行sql语句的本篇博客将来探讨这个问题 一:mysql执行过程 mysql整体的执行过程如下图所示 1.1:连接器 连接器的主要职责就是: ①负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行,其中mysql在与客户端连接TCP/IP的 ②验证请求用户的账户和密码是否正确,如果账户和密码错误,会报错:Access denied for user ‘root’‘localhost’ (using password: YES) ③如果用户的账户和密码验证通过,会在mysql自带的权限表中查询当前用户的权限: mysql中存在4个控制权限的表分别为user表db表tables_priv表columns_priv表,mysql权限表的验证过程为 1: User表:存放用户账户信息以及全局级别(所有数据库)权限决定了来自哪些主机的哪些用户可以访问数据库实例Db表:存放数据库级别的权限决定了来自哪些主机的哪些用户可以访问此数据库Tables_priv表存放表级别的权限决定了来自哪些主机的哪些用户可以访问数据库的这个表Columns_priv表存放列级别的权限决定了来自哪些主机的哪些用户可以访问数据库表的这个字段Procs_priv表存放存储过程和函数级别的权限 2: 先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在存在则通过验证。 3: 通过身份认证后进行权限分配按照userdbtables_privcolumns_priv的顺序进行验证。即先检查全局权限表user如果user中对应的权限为Y则此用户对所有数据库的权限都为Y将不再检查db, tables_priv,columns_priv如果为N则到db表中检查此用户对应的具体数据库并得到db中为Y的权限如果db中为N则检查tables_priv中此数据库对应的具体表取得表中的权限Y以此类推 4:如果在任何一个过程中权限验证不通过,都会报错 1.2:缓存 mysql的缓存主要的作用是为了提升查询的效率缓存以key和value的哈希表形式存储key是具体的sql语句value是结果的集合。如果无法命中缓存,就继续走到分析器的的一步,如果命中缓存就直接返回给客户端 。不过需要注意的是在mysql的8.0版本以后缓存被官方删除掉了。之所以删除掉,是因为查询缓存的失效非常频繁,如果在一个写多读少的环境中,缓存会频繁的新增和失效。对于某些更新压力大的数据库来说查询缓存的命中率会非常低,mysql为了维护缓存可能会出现一定的伸缩性的问题,目前在5.6的版本中已经默认关闭了比较推荐的一种做法是将缓存放在客户端性能大概会提升5倍左右 1.3:分析器 分析器的主要作用是将客户端发过来的sql语句进行分析这将包括预处理与解析过程在这个阶段会解析sql语句的语义并进行关键词和非关键词进行提取、解析并组成一个解析树。具体的关键词包括不限定于以下select/update/delete/or/in/where/group by/having/count/limit等.如果分析到语法错误会直接给客户端抛出异常:ERROR:You have an error in your SQL syntax. 比如select * from user where userId 1234; 在分析器中就通过语义规则器将select from where这些关键词提取和匹配出来,mysql会自动判断关键词和非关键词将用户的匹配字段和自定义语句识别出来。这个阶段也会做一些校验:比如校验当前数据库是否存在user表同时假如User表中不存在userId这个字段同样会报错unknown column in field list. 1.4:优化器 能够进入到优化器阶段表示sql是符合mysql的标准语义规则的并且可以执行的此阶段主要是进行sql语句的优化会根据执行计划进行最优的选择,匹配合适的索引,选择最佳的执行方案。比如一个典型的例子是这样的 表T,对A、B、C列建立联合索引在进行查询的时候当sql查询到的结果是:select xx where Bx and Ax and Cx.很多人会以为是用不到索引的但其实会用到,虽然索引必须符合最左原则才能使用,但是本质上,优化器会自动将这条sql优化为:where Ax and Bx and CX,这种优化会为了底层能够匹配到索引同时在这个阶段是自动按照执行计划进行预处理,mysql会计算各个执行方法的最佳时间,最终确定一条执行的sql交给最后的执行器 1.5:执行器 在执行器的阶段,此时会调用存储引擎的API,API会调用存储引擎主要有一下存储的引擎不过常用的还是myisam和innodb: 引擎以前的名字叫做: 表处理器(其实这个名字我觉得更能表达它存在的意义)负责对具体的数据文件进行操作,对sql的语义比如select或者update进行分析,执行具体的操作。在执行完以后会将具体的操作记录到binlog中,需要注意的一点是:select不会记录到binlog中,只有update/delete/insert才会记录到binlog中。而update会采用两阶段提交的方式,记录都redolog中 二执行的状态 可以通过命令:show full processlist,展示所有的处理进程,主要包含了以下的状态表示服务器处理客户端的状态状态包含了从客户端发起请求到后台服务器处理的过程包括加锁的过程、统计存储引擎的信息排序数据、搜索中间表、发送数据等。囊括了所有的mysql的所有状态,其中具体的含义如下图 三:sql的执行顺序 事实上,sql并不是按照我们的书写顺序来从前往后、左往右依次执行的,它是按照固定的顺序解析的,主要的作用就是从上一个阶段的执行返回结果来提供给下一阶段使用sql在执行的过程中会有不同的临时中间表一般是按照如下顺序 注 聚合函数的执行是在 GROUP BY 和 HAVING 之间 DISTINCT 在 SELECT 和 ORDER BY 之间 GROUP BY 后面的所有语句中都可能使用 SELECT 中的别名 例子: select distinct s.id from T t join S s on t.ids.id where t.name“Yrion” group by t.mobile having count(*)2 order by s.create_time limit 5; 3.1from 第一步就是选择出from关键词后面跟的表,这也是sql执行的第一步:表示要从数据库中执行哪张表。 实例说明:在这个例子中就是首先从数据库中找到表T 3.2:join on join是表示要关联的表on是连接的条件。通过from和join on选择出需要执行的数据库表T和S,产生笛卡尔积,生成T和S合并的临时中间表Temp1。on:确定表的绑定关系,通过on产生临时中间表Temp2. 实例说明找到表S,生成临时中间表Temp1,然后找到表T的id和S的id相同的部分组成成表Temp2,Temp2里面包含着T和Sid相等的所有数据 3.3:where where表示筛选,根据where后面的条件进行过滤,按照指定的字段的值(如果有and连接符会进行联合筛选)从临时中间表Temp2中筛选需要的数据,注意如果在此阶段找不到数据会直接返回客户端,不会往下进行.这个过程会生成一个临时中间表Temp3。注意在where中不可以使用聚合函数聚合函数主要是(min\max\count\sum等函数) 实例说明:在temp2临时表集合中找到T表的nameYrion的数据,找到数据后会成临时中间表Temp3,temp3里包含name列为Yrion的所有表数据 3.4:group by group by是进行分组对where条件过滤后的临时表Temp3按照固定的字段进行分组,产生临时中间表Temp4这个过程只是数据的顺序发生改变,而数据总量不会变化,表中的数据以组的形式存在 实例说明:在temp3表数据中对mobile进行分组,查找出mobile一样的数据,然后放到一起产生temp4临时表。 3.5:Having 对临时中间表Temp4进行聚合,这里可以为count等计数然后产生中间表Temp5在此阶段可以使用select中的别名 实例说明:在temp4临时表中找出条数大于2的数据,如果小于2直接被舍弃掉然后生成临时中间表temp5 3.6:select 对分组聚合完的表挑选出需要查询的数据,如果为*会解析为所有数据,此时会产生中间表Temp6 实例说明在此阶段就是对temp5临时聚合表中S表中的id进行筛选产生Temp6,此时temp6就只包含有s表的id列数据,并且name“Yrion”通过mobile分组数量大于2的数据 3.7:Distinct distinct对所有的数据进行去重,此时如果有min、max函数会执行字段函数计算然后产生临时表Temp7 实例说明:此阶段对temp5中的数据进行去重,引擎API会调用去重函数进行数据的过滤,最终只保留id第一次出现的那条数据,然后产生临时中间表temp7 3.8:order by 会根据Temp7进行顺序排列或者逆序排列然后插入临时中间表Temp8这个过程比较耗费资源 实例说明这段会将所有temp7临时表中的数据按照创建时间(create_time)进行排序,这个过程也不会有列或者行损失 四:总结 本篇博客总结了mysql的执行过程以及sql的执行顺序理解这些有助于我们对sql语句进行优化以及明白mysql中的sql语句从写出来到最终执行的轨迹有助于我们对sql有比较深入和细致的理解提高我们的数据库理解能力。同时对于复杂sql的执行过程、编写都会有一定程度的意义。
http://www.zqtcl.cn/news/410402/

相关文章:

  • 凡科网做网站怎么样专业团队电影
  • 有什么有趣的网站移动网站排名怎么做
  • 深圳网站建设专家wordpress 4.5下载地址
  • 网站建设公司公司我我提供一个平台wordpress如何去版权信息
  • seo怎么给网站做外链受欢迎的网站建设教程
  • 网站建设使用多语言河南电商网站设计
  • 网站搭建有免费的吗网站地图生成代码
  • 建设公司网站要注意什么投资小利润高的小生意
  • 网站建设需要做哪些工作做胃镜需那好天津津门网站A
  • 做网站申请域名的流程辽宁省工程造价网
  • 网站系统维护一般多长时间金华高端网站设计
  • 做网站公司销售开场白企业网站规划与开发
  • 兰州新区建站不锈钢网站建设
  • 淘宝小网站怎么做的电商网站有哪些
  • 哪些网站可以做画赚钱wordpress go跳转页
  • 怎么做新网站上线通稿深圳罗湖区网站建设公司
  • php 企业网站做网站可以赚钱吗
  • 局域网视频网站建设点播系统长沙3合1网站建设价格
  • 静态网站 服务器合肥做个网站什么价格
  • 宁阳网站设计家电网站设计方案
  • 网站备案icp秦皇岛黄金海岸
  • dedecms 金融类网站模板wordpress dux5.3
  • 学校网站源码wordpress向网站上传文件怎么做
  • 电子商务网站建设说课稿济南网站建设方案报价
  • 谈谈设计和建设网站体会wordpress header在哪
  • 360免费建站怎么进不去域名托管
  • 做网站视频存储网站建设有云端吗
  • 建网站如何上传南通 网站优化
  • 青海学会网站建设公司果汁网站模板
  • 10_10_网站建站怎么做网站链接支付