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

网站照片上传不了网站开发需要学习什么技术

网站照片上传不了,网站开发需要学习什么技术,郴州新网交友手机版,职业技术培训前言本文将重点梳理mysql的体系架构#xff0c;便于了解mysql的实现原理。Mysql体系结构Client Connectors 接入方 支持协议很多Management Serveices Utilities 系统管理和控制工具#xff0c;mysqldump、 mysql复制集群、分区管理等Connection Pool 连接池#xff1…前言本文将重点梳理mysql的体系架构便于了解mysql的实现原理。Mysql体系结构Client Connectors 接入方 支持协议很多Management Serveices Utilities 系统管理和控制工具mysqldump、 mysql复制集群、分区管理等Connection Pool 连接池管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求SQL Interface SQL接口接受用户的SQL命令并且返回用户需要查询的结果Parser 解析器SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的Optimizer 查询优化器SQL语句在查询之前会使用查询优化器对查询进行优化Cache和Buffer(高速缓存区) 查询缓存如果查询缓存有命中的查询结果 查询语句就可以直接去查询缓存中取数据pluggable storage Engines 插件式存储引擎。存储引擎是MySql中具体的与文件打交道的子系统file system 文件系统数据、日志(redoundo)、索引、错误日志、查询记录、慢查询等MySQL执行流程以mysql查询优化流程为例mysql查询执行的路径如下图所示下面分步了解下每个步骤1. mysql 客户端/服务端通信半双工的通信方式Mysql客户端与服务端的通信方式是“半双工”半双工通信 在任何一个时刻要么是有 服务器 向客户端发送数据要么是客户端向服务端发送数据这两个动作不能同时发生。所以我们无法也无需将一个消息切成小块进行传输。特点和限制 客户端一旦开始发送消息另一端要接收完整个消息才能响应。 客户端一旦开始接收数据没法停下来发送指令。注全双工双向通信发送同时也可以接收 半双工双向通信同时只能接收或者是发送无法同时做操作 单工只能单一方向传送查询状态对于一个mysql连接或者说一个线程时刻都有一个状态来标识这个连接正在做什么查看命令 show full processlist / show processlist注 状态全集https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.htmlSleep 线程正在等待客户端发送数据Query 连接线程正在执行查询Locked 线程正在等待表锁的释放Sorting result 线程正在对结果进行排序Sending data 向请求端返回数据可通过kill {id}的方式进行连接的杀掉2. 查询缓存工作原理 缓存SELECT操作的结果集和SQL语句 新的SELECT语句先去查询缓存判断是否存在可用的记录集 判断标准 与缓存的SQL语句是否完全一样区分大小写 (简单认为存储了一个key-value结构key为sqlvalue为sql查询结果集)query_cache_type值0 -– 不启用查询缓存默认值值1 -– 启用查询缓存只要符合查询缓存的要求客户端的查询语句和记录集 都可以缓存起来供其他客户端使用加上 SQL_NO_CACHE将不缓存值2 -– 启用查询缓存只要查询语句中添加了参数SQL_CACHE且符合查询 缓存的要求客户端的查询语句和记录集则可以缓存起来供其他客户端使用query_cache_size 允许设置query_cache_size的值最小为40K默认1M推荐设置 为64M/128Mquery_cache_limit 限制查询缓存区最大能缓存的查询记录集默认设置为1Mshow status like Qcache% 命令可查看缓存情况不会缓存的情况当查询语句中有一些不确定的数据时则不会被缓存。如包含函数NOW() CURRENT_DATE()等类似的函数或者用户自定义的函数存储函数用户变 量等都不会被缓存.当查询的结果大于query_cache_limit设置的值时结果不会被缓存对于InnoDB引擎来说当一个语句在事务中修改了某个表那么在这个事务 提交之前所有与这个表相关的查询都无法被缓存。因此长时间执行事务 会大大降低缓存命中率查询的表是系统表查询语句不涉及到表缓存是一个坑吗为什么mysql默认关闭了缓存开启在查询之前必须先检查是否命中缓存,浪费计算资源如果这个查询可以被缓存那么执行完成后MySQL发现查询缓存中没有这个查询则会将结果存入查询缓存这会带来额外的系统消耗针对表进行写入或更新数据时将对应表的所有缓存都设置失效。如果查询缓存很大或者碎片很多时这个操作可能带来很大的系统消耗缓存的适用场景以读为主的业务数据生成之后就不常改变的业务 比如门户类、新闻类、报表类、论坛类等3. 查询优化处理查询优化处理的三个阶段解析sql通过lex词法分析,yacc语法分析将sql语句解析成解析树注lex词法分析介绍https://www.ibm.com/developerworks/cn/linux/sdk/lex/预处理阶段根据mysql的语法的规则进一步检查解析树的合法性如检查数据的表和列是否存在解析名字和别名的设置。还会进行权限的验证查询优化器优化器的主要作用就是找到最优的执行计划查询优化器如何找到最优执行计划使用等价变化规则 5 5 and a 5 改写成 a 5 a b and a 5 改写成 b 5 and a 5 基于联合索引调整条件位置等优化count 、min、max等函数 min函数只需找索引最左边 max函数只需找索引最右边 myisam引擎count(*)覆盖索引扫描子查询优化提前终止查询 用了limit关键字或者使用不存在的条件IN的优化 先进性排序再采用二分查找的方式 ...Mysql的查询优化器是基于成本计算的原则。他会尝试各种执行计划。 数据抽样的方式进行试验(随机的读取一个4K的数据块进行分析)执行计划idselect查询的序列号标识执行的顺序 1、id相同执行顺序由上至下 2、id不同如果是子查询id的序号会递增id值越大优先级越高越先被执行 3、id相同又不同即两种情况同时存在id如果相同可以认为是一组从上往下顺序执行在所有组中id值越大优先级越高越先执行select_type查询的类型主要是用于区分普通查询、联合查询、子查询等SIMPLE简单的select查询查询中不包含子查询或者unionPRIMARY查询中包含子部分最外层查询则被标记为primarySUBQUERY/MATERIALIZEDSUBQUERY表示在select 或 where列表中包含了子查询MATERIALIZED表示where 后面in条件的子查询UNION若第二个select出现在union之后则被标记为unionUNION RESULT从union表获取结果的selecttable查询涉及到的表 直接显示表名或者表的别名 由ID为M,N 查询union产生的结果 由ID为N查询生产的结果type访问类型sql查询优化中一个很重要的指标结果值从好到坏依次是 system const eq_ref ref range index ALLsystem表只有一行记录(等于系统表) const类型的特例基本不会出现可以忽略不计const表示通过索引一次就找到了const用于比较primary key 或者 unique索引eq_ref唯一索引扫描对于每个索引键表中只有一条记录与之匹配。常见于主键 或 唯一索引扫描ref非唯一性索引扫描返回匹配某个单独值的所有行本质是也是一种索引访问range只检索给定范围的行使用一个索引来选择行indexFull Index Scan索引全表扫描把索引从头到尾扫一遍ALLFull Table Scan遍历全表以找到匹配的行Extra十分重要的额外信息Using filesort mysql对数据使用一个外部的文件内容进行了排序而不是按照表内的索引进行排序读取Using temporary 使用临时表保存中间结果也就是说mysql在对查询结果排序时使用了临时表常见于order by 或 group byUsing index 表示相应的select操作中使用了覆盖索引(Covering Index)避免了访问表的数据行效率高Using where 使用了where过滤条件select tables optimized away 基于索引优化MIN/MAX操作或者MyISAM存储引擎优化COUNT(*)操作不必等到执行阶段在进行计算查询执行计划生成的阶段即可完成优化其他possible_keys: 查询过程中有可能用到的索引key: 实际使用的索引如果为NULL则没有使用索引rows: 根据表统计信息或者索引选用情况大致估算出找到所需的记录所需要读取的行数filtered: 它指返回结果的行占需要读到的行(rows列的值)的百分比,表示返回结果的行数占需读取行数的百分比,filtered的值越大越好4. 查询执行引擎调用插件式的存储引擎的原子API的功能进行执行计划的执行5. 返回客户端1、有需要做缓存的执行缓存操作2、增量的返回结果开始生成第一条结果时,mysql就开始往请求方逐步返回数据这样做有如下两个 好处mysql服务器无须保存过多的数据浪费内存用户体验好马上就拿到了数据如何定位慢sql什么时候需要考虑慢sql1、业务驱动2、测试驱动3、慢查询日志慢查询日志配置show variables like slow_query_log set global slow_query_log on set global slow_query_log_file /var/lib/mysql/gupaoedu-slow.log set global log_queries_not_using_indexes on set global long_query_time 0.1 (秒)慢查询日志分析Time 日志记录的时间Use rHost执行的用户及主机Query_time查询耗费时间Lock_time 锁表时间 Rows_sent 发送给请求方的记录 条数Rows_examined 语句扫描的记录条数SET timestamp 语句执行的时间点select .... 执行的具体语句慢查询日志分析工具mysqldumpslow -t 10 -s at /var/lib/mysql/gupaoedu-slow.log其他工具 mysqlsla pt-query-digest总结本文重点介绍了mysql的体系架构从中可以了解到一条sql的执行路径1.建立连接-- 2.查询缓存--3.查询优化处理(解析预处理优化器)-- 4.查询执行引擎-- 5.返回处理结果 这些都是mysql的内部处理理解此流程有助于理解mysql的实现原理。下一篇将重点梳理下mysql中的各种执行引擎。
http://www.sadfv.cn/news/131111/

相关文章:

  • 设计网站都有什么作用产品线上推广方案
  • 住房和城乡建设部网站唐山企业网站开发标准
  • 创意设计企业网站优化代码
  • 焦作专业做网站公司哪家好中国建设报电子版在线阅读
  • 自己电脑做网站服务器违法吗tag改为静态wordpress
  • 做网站卖袜子效益如何广东企业网站seo点击软件
  • 大连免费网站制作wordpress会自动更新
  • 卓光网站建设重庆做网络推广
  • 启迪网站开发商业网站页面
  • 网站建设公司dyfwzx湖南网站建设公司速来磐石网络
  • 公司企业网站建设qq教程网站源码
  • 通讯数码网站陕西宏远建设集团网站
  • 网站开发会员功能教程互联网网站运营
  • html5 爱情网站模板网站数据分析工具有哪些
  • 网站建设 教学视频南宁区建设银行招聘网站
  • 用自己电脑做网站服务器建个人网站能赚钱吗
  • wordpress获取站点标题网站的盈利方法
  • 简述阐述网站建设的步骤过程做网站有效果吗
  • 新乡个人网站建设价格做国外网站做什么内容好
  • 网站后台编辑器不显示sae 网站模板
  • 肇庆关键词网站排名男女做暖暖的试看网站漫画
  • 仿制网站的软件搜集素材的网站
  • 网站开发支付功能怎么做微山做网站
  • 湖北网站建设网址wordpress指定域名
  • 网站网页制作的公网址大全分类之一览表大全网
  • 网站没有做适配 怎么办域名怎么建网站
  • seo网站外链工具电商网站平台有哪些功能
  • 宝安网站设计项目室内外设计
  • 保康网站建设wordpress5换回编辑器
  • 淄博网站建设公司有多少家微信api文档