MySQL 使用 OR 条件导致索引失效
原来的 SQL:能走到索引
SELECT count(1)
FROM XXX
WHERE 1 = 1 AND
(
(3_id = 12345)
OR
(4_id = 12345)
);
很多人都喜欢用 OR 去解决,虽然语句简单,但是就会发生下面的场景,容易走不到索引
新需求导致改造SQL为: 走不到索引
SELECT count(1)
FROM XXX
WHERE 1 = 1 AND
(
(3_id = 12345)
OR
(4_id = 12345)
OR
(2_id = 12345)
);
or 跟 and 不一样,添加 (3_id,4_id,2_id) 不能解决问题。
优化的方法是改成 union。分成多个 sql,走各自的索引。如果可能有重复就用union 不用union all。
select count(1) from
(
SELECT * FROM XXX WHERE 1 = 1 AND (3_id = 12345)
union
SELECT * FROM XXX WHERE 1 = 1 AND (tk_4th_pub_id = 12345)
union
SELECT * FROM XXX WHERE 1 = 1 AND (tk_pub_id = 12345)
) as a where a.refund_status = XXX;
or 条件在数据库上很难优化,能在代码里优化逻辑,不至于拖垮数据库。只有在 or 条件下无需索引时(且需要比较的数据量小),才考虑。
相同字段 or 可改成 in,如 f_id=1 or f_id=100 -> f_id in (1,100)。上述优化情景都是存储引擎在 InnoDB 情况下,在MyISAM有不同
————————————————
版权声明:本文为CSDN博主「wenniuwuren」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wenniuwuren/article/details/89472136
MySQL 使用 OR 条件导致索引失效相关推荐
- mysql left join 索引失效_MySQL索引列上做操作导致索引失效案例分析
索引列上做操作导致索引失效 通常我们认为只要建立索引就可以万事大吉,以为只要建立就一定会使用到,可其实在索引列上的计算.函数.类型转换都可能导致索引失效,所以我们不仅要会创建索引,更重要的是如何正确的 ...
- mysql联合索失效_mysql 联合索引生效的条件、索引失效的条件
1.联合索引失效的条件 联合索引又叫复合索引.两个或更多个列上的索引被称作复合索引. 对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引 ...
- MySQL 字符集不一致导致索引失效的一个真实案例
文章目录 问题描述 问题分析 总结 大家好,我是只谈技术不剪发的 Tony 老师.今天给大家分析一个由于 MySQL 字符集不一致导致索引失效的案例. 问题描述 有个朋友给我发来一个问题,说是他们的系 ...
- mysql隐式转换造成索引失效的事故总结
隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给mysql,这样 ...
- 【数据库】13种会导致索引失效语句写法
数据库的索引是保证数据快速查询的重中之重,以下13种会导致索引失效语句会导致你的SQL查询索引失效,具体如下: 1.使用like关键字模糊查询时,% 放在前面索引不起作用,只有"%" ...
- 索引法则--LIKE以%开头会导致索引失效进而转向全表扫描(使用覆盖索引解决)...
Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...
- 索引法则--字符串不加单引号会导致索引失效
Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...
- or导致索引失效的解决方法_SQL优化之索引失效
尽量全值匹配 建表语句: CREATE TABLE `t_logs` ( `id` int(10) NOT NULL AUTO_INCREMENT, `action` varchar(100) DEF ...
- MySQL like查询后置%索引失效分析
MySQL like查询后置%索引失效分析 表结构 CREATE TABLE `t_food_shop` (`id` bigint(20) unsigned NOT NULL AUTO_INCREME ...
最新文章
- memcached(二)事件模型源码分析
- 连岳读书|这是不让人害怕的数学,课堂上学不到的数学!
- OOM分析之问题定位(二)
- Nginx配置文档具体解释
- LinkedIn公司采用超大规模数据中心设计
- [CentOS] CentOS 6 IPv6 关闭方法
- sql 基础增删改查语句
- m1 MBA配置python及Numpy科学计算环境
- 大数据学习笔记:ZooKeeper练习
- 是否担心别人将你的博客文章全部爬下来?3行代码教你检测爬虫
- Javascript综合应用小案例
- android studio创建构造方法,使用Android studio创建你的第一个项目
- Node.js 开发者的 Rust 入门指南
- 二进制安装的mysql怎么卸载_mysql安装-----二进制包安装及卸载
- 从“三只小猪”的故事到“高性能”测试自动化
- 《中国人工智能学会通讯》——9.6 哈希学习
- CSS3_线性渐变(linear-gradient)+ 盒子阴影(box-shadow)
- QT正则表达式---针对IP地址
- 《阿里感悟》- 技术人员的职业规划
- C语言---双人贪吃蛇
热门文章
- QT的QLinkedList类的使用
- QT的QAudioInput类的使用
- c++原型模式prototype
- 「JupyterNotebook-bug」Jupyter Notebook卸载已安装的第三方库不能输入yes的问题
- 02_tensorflow2环境安装、CUDA 10.1 和CUDnn 7.6.5 版本安装、https://tensorflow.google.cn/overview中概述翻译
- B18_NumPy副本和视图(视图或浅拷贝、副本或深拷贝、深浅拷贝)
- MULE ESB环境搭建和例子(通过装插件的方式)
- js防止表单重复提交
- Python描述性统计示例
- ImportError: cannot import name cbook