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

邹城网站设计wordpress忘记密码修改数据库

邹城网站设计,wordpress忘记密码修改数据库,惠州 商城网站建设,中企动力是什么公司一、前言 在日常开发过程中关于MySQL的优化方面#xff0c;我们知道小表驱动大表原理。例如left join#xff0c;放在左边的表作为驱动表。但是用left join的话#xff0c;左边的表一定是驱动表吗#xff0c;本文将通过案例分析给出详细分析。 二、概念 在MySQL中#xf…一、前言 在日常开发过程中关于MySQL的优化方面我们知道小表驱动大表原理。例如left join放在左边的表作为驱动表。但是用left join的话左边的表一定是驱动表吗本文将通过案例分析给出详细分析。 二、概念 在MySQL中JOIN操作涉及到两个或多个表的连接其中一个表被称为驱动表也称为外表另一个表或多个表被称为被驱动表也称为内表或从表。 驱动表外表在JOIN操作中首先被访问的表称为驱动表。 被驱动表内表或从表在JOIN操作中与驱动表进行匹配的表称为被驱动表。 三、优化策略(小表驱动大表原理) 在MySQL的JOIN操作中当涉及到两个或多个表的连接时其中一个表被选为驱动表小表另一个表作为被驱动表大表。小表驱动大表的原理就是尽量让数据量较小的表作为驱动表通过其数据去匹配大数据量的表以减少循环匹配的次数从而提高查询性能。 示例   假设我们有两个表A和B其中A表有1000行数据B表有100万行数据。如果以A表作为驱动表去连接B表那么最多只需要循环1000次而如果以B表作为驱动表去连接A表则需要循环100万次。显然选择A表作为驱动表将大大提高查询性能。 选择小表作为驱动表的好处 减少循环次数当驱动表的数据量较小时循环的次数会相应减少从而减少了整体的计算量。反之如果大表作为驱动表则需要多次循环遍历大表的数据去匹配小表这将大大增加计算量。 利用索引如果小表上有合适的索引MySQL可以更快地定位到需要的数据行进一步减少扫描的行数。同时索引的使用也可以提高JOIN操作的效率。 优化器决策MySQL的优化器会根据表的统计信息、索引情况、查询条件等因素来自动选择最佳的驱动表。优化器的目标是找到一种执行计划使得查询的代价如I/O操作、CPU时间等最小。 四、案例分析 我们在编写SQL的时候通常情况下是这样子的   LEFT JOIN在左连接中左边的表通常作为驱动表。   RIGHT JOIN在右连接中右边的表作为驱动表。   INNER JOIN对于内连接MySQL会自动选择数据量较小的表作为驱动表。 这是通常情况下下面我们准备一些测试数据 1. 准备数据 a1表 a2表 2.准备查询语句1和查询语句2 语句1 select * from a1 left join a2 on(a1.f1a2.f1) and (a1.f2a2.f2); 语句2 select* from a1 left join a2 on(a1.f1a2.f1)where (a1.f2a2.f2);3. 查询语句1的执行结果 4. 查询语句2的执行结果 5. 语句1的EXPLAIN执行结果分析 从EXPLAIN执行计划中看的出来 驱动表是表a1被驱动表是表a2。 由于表a2的f1字段上没有索引所以使用的是 Block Nested Loop Join简称 BNL 算法。 BNL算法基本原理 将外层循环的结果集存入join buffer在BNL算法中外层循环通常是较小的表或结果集的行或结果集会被存储在一个称为join buffer的内存区域中。 内层循环与buffer中的记录做比较内层循环通常是较大的表或结果集的每一行数据会与整个buffer中的记录进行比较而不是像传统的Nested Loop JoinNLJ算法那样每次只与外层循环的一行进行比较。 结合算法与执行计划语句1的执行过程如下 ①. 把表a1的内容读入join_buffer 中 ②. 顺序扫描表a2对于每一行数据判断条件(a1.f1a2.f1) and (a1.f2a2.f2)是否满足满足条件的记录, 作为结果集的一行返回。如果语句中有 where 子句需要先判断 where 部分满足条件后再返回。 ③. 表a2扫描完成后对于没有被匹配的表a1的行把剩余字段补上 NULL再放入结果集中。 6. 语句2的EXPLAIN执行结果分析 从EXPLAIN执行计划中看的出来 以表a2为驱动表的。 语句2的执行过程   顺序扫描表a2每一行用a2.f1到表a1中去查匹配到记录后判断a1.f2a2.f2 是否满足满足条件的话就作为结果集的一部分返回。 为什么呢我们执行一下show warnings看看优化器是怎么做的。 语句1 语句2 在 MySQL 里NULL 跟任何值执行等值判断和不等值判断的结果都是 NULL。这里包括 select NULL NULL 的结果也是返回 NULL。 因此语句2里面 where a1.f2a2.f2 就表示查询结果里面不会包含 a2.f2是NULL的行这样这个left join的语义就是“找到这两个表里面f1、f2 对应相同的行。 对于表a1中存在而表a2中匹配不到的行就放弃。这样这条语句虽然用的是 left join但是语义跟 join 是一致的。 因此优化器就把这条语句的 left join 改写成了 join然后因为表 a1 的 f1 上有索引就把表 a2 作为驱动表。 五、结论 1、即使我们在SQL语句中写成left join执行过程还是有可能不是从左到右连接的。也就是说使用left join时左边的表不一定是驱动表。 2、如果需要left join的语义就不能把被驱动表的字段放在where条件里面做等值判断或不等值判断必须都写在on里面。 六、总结 通过对案例的分析我们在写sql的时候就有了优化方案 1. 用小结果集驱动大结果集减少外层循环的数据量 2. 如果小结果集和大结果集连接的列都是索引列mysql在join时也会选择用小结果集驱动大结果集因为索引查询的成本是比较固定的这时候外层的循环越少join的速度便越快。 3. 为匹配的条件增加索引争取使用Index Nested-Loop Join减少内层表的循环次数 4. 增大join buffer size的大小当使用Block Nested-Loop Join时一次缓存的数据越多那么外层表循环的次数就越少减少不必要的字段查询。 5. 当用到Block Nested-Loop Join时字段越少join buffer 所缓存的数据就越多外层表的循环次数就越少。
http://www.zqtcl.cn/news/173806/

相关文章:

  • 网站虚拟主持人制作国内网站建设排名
  • 上海房地产网站建设报价wordpress.备份
  • 网站建设运营维护合同专用车网站建设价格
  • 建设部咨询资质网站平台类网站建设公司
  • wap 网站 源码网站建立
  • 辽阳专业建设网站公司山东省工程建设招标信息网站
  • 下载专门做初中数学题的网站佛山网站制作在线
  • 永康物流网站蒙牛企业网站建设规划书
  • 网站开发发和后台开发有什么区别马鞍山网站建设价格
  • 广州建设银行预约公积金网站怎么下载ppt免费模板
  • 网站策划的基本过程网站设置在哪
  • 内蒙古住房和城乡建设网站网站建设需要购买什么
  • 网站做调查问卷给钱的兼职南通营销网站制作
  • 开个微网站需要什么自己制作网页的步骤
  • 有专业做线切割配件的网站吗中国婚恋网站排名
  • 做ppt网站大全中国工程建设信息网站
  • 汉滨区住房和城乡建设局网站淘宝客购物网站的怎么做
  • 一个网站用多个域名分页网站
  • 门户网站举例phpstuy wordpress
  • 做网站许昌美业管理软件系统排名
  • 温州市建设工程质量安全管理总站贵阳最新消息今天
  • 成都服装网站建设工作是否能给我们带来快乐
  • 电商网站建设综述长沙高端网站建设
  • 网站建设有哪些环节怎么申请网址
  • 做网站要什么软件经典网站首页
  • 个人网站备案转公司备案长沙网站seo报价
  • 上海网站开发建设电话电影vip网站建设步骤
  • 17.zwd一起做网站池尾站邢台快用网络科技有限公司
  • 做写字楼租赁用什么网站好如何申请网站com域名
  • 如何查询网站服务商安徽省建设厅证件查询安全员c证