记mysql中delete操作中使用in不会走索引的问题[通俗易懂]

记mysql中delete操作中使用in不会走索引的问题[通俗易懂]目前负责的一个项目,需要维护一个电话号码对比库,表名为phone_bak1,以下称为a表,量级为3000万条。还有另外一张表存储电话白名单,表名为phone_delete,以下称为b表,量级为3000

记mysql中delete操作中使用in不会走索引的问题

  目前负责的一个项目,需要维护一个电话号码对比库,表名为phone_bak1,以下称为a表,量级为3000万条。还有另外一张表存储电话白名单,表名为phone_delete,以下称为b表,量级为3000条左右。

  目的呢,是要从a表中排除掉在b表中的电话号码。

  我直接使用以下语句:

  DELETE FROM phone_bak1 WHERE phone IN (SELECT phone FROM phone_delete)

  然后phpMyAdmin直接就报超时了。虽然超时了但是语句还是执行了,当时没多想,就没管,今天就拿到研究研究。加上EXPLAIN分析sql语句:

  EXPLAIN DELETE FROM phone_bak1 WHERE phone IN (SELECT phone FROM phone_delete)

  记mysql中delete操作中使用in不会走索引的问题[通俗易懂]

  可以看到并没有走索引,而是遍历了a表,所以执行时间会很长,难道是where in 不会走索引?带着这样的疑惑,我尝试了查询语句:

 

 

   EXPLAIN SELECT * FROM phone_bak1 WHERE phone IN (SELECT phone FROM phone_delete)

  记mysql中delete操作中使用in不会走索引的问题[通俗易懂]

  很明显,where in 是会走索引的,但是在delete中使用不会使用索引。在网上查询了下资料,看到有人说使用inner join mysql会走索引,于是我尝试了下,使用以下sql语句:

  EXPLAIN DELETE phone_bak1 FROM phone_bak1 INNER JOIN phone_delete ON phone_bak1.phone = phone_delete.phone

  记mysql中delete操作中使用in不会走索引的问题[通俗易懂]

 

 

   可以看到使用inner join 确实走了索引,今天发现这个问题觉得还是挺有意思的,把它记录下来,希望自己以后在项目中不要犯这种错误

  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9555.html

(0)
上一篇 2023-02-05
下一篇 2023-02-05

相关推荐

  • Python字典删除键操作示例

    Python字典删除键操作示例Python语言是一种广泛使用的高级编程语言,其重要的数据结构之一就是字典。字典类型提供了一种灵活且高效的方式来存储和处理数据。在Python中,字典类型使用“{key:value}”的形式表示。其中的key表示唯一的指定值,而value则为存储的数据。它们的结合组成了键值对(key-value pairs)。与许多其它编程语言不同的是,Python允许删除字典中的键。Python字典删除键操作示例成为编程中很重要的一个部分。

    2024-07-04
    58
  • mysql标识列和事务 – 自律即自由[亲测有效]

    mysql标识列和事务 – 自律即自由[亲测有效]1 #标识列 2 /* 3 又称为自增长列 4 含义:可以不用手动的插入值,系统提供默认的序列值 5 6 7 特点: 8 1、标识列必须和主键搭配吗?不一定,但要求是一个key 9 2、一个表可以有几

    2023-03-20
    146
  • 解决Python中的__file__变量未定义的问题

    解决Python中的__file__变量未定义的问题在Python中,__file__是一个内置的变量,表示当前脚本文件的完整路径和文件名。它通常被用于在代码中获取文件所在目录的路径,或者用于读取文件的内容。

    2024-02-09
    90
  • SQL的基础函数「终于解决」

    SQL的基础函数「终于解决」SQL的基础函数 lower select lower(name) from students #将students表的所有name字段的数据全都转为小写打印出来 upper select upper

    2023-04-20
    157
  • 用Python的os.path.basename函数获取文件名

    用Python的os.path.basename函数获取文件名 在Python中,我们可以使用os.path.basename函数获取文件路径中的文件名部分,该函数用于获取文件的基本名称(字符串中最后一个反斜杠以后的部分),并将其作为字符串返回。如果路径以反斜杠结尾,则返回前一个部分。该函数可以应用于多种操作系统,如Windows,Linux,Unix等。使用该函数时,需要导入os模块。

    2023-12-10
    113
  • Python脚本编写原始标题

    Python脚本编写原始标题Python是一门十分强大的编程语言,在众多开发领域都有广泛的应用。其中,Python脚本编写是开发中的常见需求,将代码逻辑组织成脚本可以让开发人员高效地完成某些自动化任务。Python脚本编写原始标题是Python脚本编写过程中不可避免的一部分,因为这可以帮助开发者更好地组织代码文件。

    2024-05-11
    74
  • Python Sum详解

    Python Sum详解Python中的Sum函数是一个非常有用的函数,其功能是将一个可迭代对象中的所有元素相加。它的好处是,可以将一个列表或其他可迭代对象中的元素相加,而不需要编写复杂的代码。本文将详细介绍Python中的Sum函数以及它的实现和使用方法。

    2024-05-22
    67
  • pg_is_in_recovery_源码反编译

    pg_is_in_recovery_源码反编译作者:张连壮 PostgreSQL 研发工程师 从事多年 PostgreSQL 数据库内核开发,对 citus 有非常深入的研究。 上一期 我们介绍了 PostgreSQL 数据找回工具:pg_rec

    2023-04-29
    171

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注