mysql 左连接 怎么走索引_mysql左连接

1.on 后面的条件和where 后面的条件的区别

查询语句开始 会根据 on后面的条件创建一张虚拟表,左边表是全部数据,右边表会根据on后面的条件进行筛选。

然后再根据where后面的条件进行筛选虚拟表中的数据作为最终数据

所以如果是筛选右表中的条件 放在了where 中则则会过滤掉 部分左表中的数据

结论:筛选右表的条件和左右表关联的条件写在on中  筛选左表的条件写在where中

2.右表中的条件放在on中 如果右表的数据量很大的情况下会有很长的查询时间  是因为创建虚拟表的时候由于数据量大 查询条件没有索引造成的  所以相应的增加索引进行查询。

3.创建索引

alter table  tableName  add Index indexName(clum);

ALTER  TABLE optable_task_item  ADD  INDEX task_id (  `task_id`  );

4.那么where 中的条件创建索引时候有用呢?

5.mysql 的主键索引是聚集索引 采用b+tree的数据结构,和btree的区别是  b+树的data地址放置在叶子节点上,子节点上的主键个数根据区域分开 可以更快的定位id  普通索引是非聚集索引,索引下面对应的是主键 ,找到到主键后在去查询主键索引表中查询数据。联合索引两个索引是都存储在索引变中的,所以部分情况下是不去查找索引表的。

6.索引的数据类型分为两种 tree 和hash桶  hash桶一般情况下查找的时间复杂度是 O(1)  但是限制于等值查找,对于范围查找、模糊查询  联合索引的部分查找都不起作用,并且如果键值存在大量的重复,还是比较慢的。B+TREE 从根节点到叶子节点的高度不超过一,所以平均的查询速度相差不大,桶层级之间的指针有索引关联,可以左右同时查找。

7.为什么sql查询中避免用 in 和or查询  可能不能命中索引,在没有索引的情况下,in是O(logn) or 是O(n)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值