美文网首页
MySQL中使用OR连接查询条件不会让索引失效

MySQL中使用OR连接查询条件不会让索引失效

作者: 锅与盆 | 来源:发表于2018-04-04 20:52 被阅读0次

今天听到一种说法,说OR会使索引失效,最好使用UNION代替。查了一下发现的确有些文章这么说。但总觉得没什么道理。直觉上觉得虽然or连接的查询条件不能使用联合索引,但感觉两个单独的索引是可以用的。看了一些文章,感觉一直很疑惑。

于是试了一下,发现果然如此。

explain SELECT * from t WHERE id = 1 or uid = 2;
id select_type table type possible_keys key ref rows Extra
1 SIMPLE t index_merge PRIMARY,uid PRIMARY,uid 2 Using union(PRIMARY,uid); Using where

这里的type项是index_merge。搜索后发现是MySQL5.0后的新技术,索引合并。index merge 技术简单说就是在用OR,AND连接的多个查询条件时,可以分别使用前后查询中的索引,然后将它们各自的结果合并交集或并集。当然具体是否使用index merge,优化器会自己选择,比如and连接时有联合索引,或干脆全表查询就很快,就没必要使用它了。
具体可以查阅文档:https://dev.mysql.com/doc/refman/5.6/en/index-merge-optimization.html
还是很有意思的。

可能因为mysql这个东西太复杂,感觉sql优化都快成玄学了。网上流传了很多“奇技淫巧”,让人真假难辨。我觉得可能是过去mysql优化不是很好时,大家有一些优化的技巧,但随着mysql更新优化,现在已经成为过时甚至错误的做法。但这些说法还在流传,造成了我这样的新手的困惑。

所以看来小白要学技术,还是要踏实点多看官方文档,多亲自实践,少看博客,少道听途说。

相关文章

  • MySQL中使用OR连接查询条件不会让索引失效

    今天听到一种说法,说OR会使索引失效,最好使用UNION代替。查了一下发现的确有些文章这么说。但总觉得没什么道理。...

  • 数据库篇

    1、mysql索引在什么情况下回失效1、查询条件包括or可能导致索引失效2、查询时字段类型是字符串,where时参...

  • 63 MySQL实战性能优化-optimizer_trace

    1,mysql索引性能优化最佳实战 2, 使用索引查询如何避免回表查询 3,为什么查询有时候加了索引也会失效? 4...

  • Mysql SQL查询今天、昨天、n天内、第n天

    Mysql SQL查询今天、昨天、n天内、第n天 注意:因为对索引列使用函数会导致索引失效,如果查询时需要使用到索...

  • MySQL,必须掌握的6个知识点

    目录 一、索引B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化使用 ...

  • Mysql 索引失效以及行锁,表锁

    mysql 索引失效有以下几种情况 1,or 语句,如果要在or语句中使用索引,那么所有条件都必须使用索引,建议尽...

  • 数据库查询优化的一些点——索引

    尽量不要在where 条件之后使用函数来作为查询条件,因为这样做会使得该查询字段的索引失效 在做查询的时候如果in...

  • MySQL sql优化-组合索引理解

    由于mysql在执行查询计划中对于单个表的查询只会使用一个索引,但在系统使用中对于单表总是各种不同的条件组合查询,...

  • MySQL--基础二

    本节总结MySQL的筛选条件,聚合与分组,子查询,连接查询。 MySQL的筛选条件 MySQL中的比较运算符: 比...

  • mysql 索引失效分析

    索引并不会时时发生,有时就算是where查询字段中添加了索引,索引也会失效,下面我们来讲讲五种索引失效的场景。 1...

网友评论

      本文标题:MySQL中使用OR连接查询条件不会让索引失效

      本文链接:https://www.haomeiwen.com/subject/jeelhftx.html