博客
关于我
MySQL中使用IN()查询到底走不走索引?
阅读量:800 次
发布时间:2023-02-11

本文共 706 字,大约阅读时间需要 2 分钟。

MySQL中使用IN查询到底走不走索引?

在实际项目中,关于MySQL中IN查询是否走索引的问题,经常会引发很多讨论。很多开发者对这一点存在误解,需要通过实际案例来分析。

看数据量

IN查询是否走索引,实际上取决于查询的数据量。通过EXPLAIN工具可以观察到以下情况:

  • IN (0,1) 查询:

    EXPLAINSELECT * from users WHERE is_doctor in (0,1);

    这时候查询没有走索引,返回了大约52万条数据,而全表只有54万条记录。

  • IN (2,1) 查询:

    EXPLAINSELECT * from users WHERE is_doctor in (2,1);

    这时候查询走了索引,只返回了约1万条数据。

  • 由此可以看出,IN查询是否走索引与IN后面所包含的数据量有关。

    IN后面是不是有子查询

    关于这一点,需要进一步分析。假设我们有一个子查询:

    EXPLAINSELECT * from users WHERE is_doctor in (SELECT is_doctor from test_in_subselect);

    这时候查询是否走索引,取决于子查询的结果。实际测试显示,这种情况下查询会走索引。

    总结

    通过以上分析,可以得出以下结论:

  • IN查询通常是走索引的,但当IN后面的数据量超过表中数据的30%时,才会走全表扫描。

  • 因此,IN查询是否走索引,需要根据实际情况进行控制。优点是可以提高查询性能,劣势是可能导致索引列过多,影响查询效率。

  • 建议在实际项目中,控制IN查询的范围,避免过多的IN条件。

  • 这种情况下,IN查询既有优劣,需要根据实际需求进行权衡。

    转载地址:http://ipbfk.baihongyu.com/

    你可能感兴趣的文章
    OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
    查看>>
    OSI操作系统(NETBASE第八课)
    查看>>
    OSM数据如何下载使用(地图数据篇.11)
    查看>>
    OSPF 四种设备角色:IR、ABR、BR、ASBR
    查看>>
    OSPF 四种路由类型:Intra Area、Inter Area、第一、二类外部路由
    查看>>
    OSPF 学习
    查看>>
    OSPF 支持的网络类型:广播、NBMA、P2MP和P2P类型
    查看>>
    OSPF 概念型问题
    查看>>
    OSPF 的主要目的是什么?
    查看>>
    SQL Server 存储过程分页。
    查看>>
    OSPF不能发现其他区域路由时,该怎么办?
    查看>>
    OSPF两个版本:OSPFv3与OSPFv2到底有啥区别?
    查看>>
    SQL Server 存储过程
    查看>>
    OSPF在大型网络中的应用:高效路由与可扩展性
    查看>>
    OSPF太难了,这份OSPF综合实验请每位网络工程师查收,周末弯道超车!
    查看>>
    OSPF技术入门(第三十四课)
    查看>>
    OSPF技术连载10:OSPF 缺省路由
    查看>>
    OSPF技术连载11:OSPF 8种 LSA 类型,6000字总结!
    查看>>
    OSPF技术连载12:OSPF LSA泛洪——维护网络拓扑的关键
    查看>>
    OSPF技术连载13:OSPF Hello 间隔和 Dead 间隔
    查看>>