博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql中or和in的效率
阅读量:5929 次
发布时间:2019-06-19

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

前言

今天遇到了一个网站卡死的问题,过了几分钟就好了,找到了一个定时脚本中有个sql,执行效率很慢,DBA建议将or改为in,效率提升了几百倍

场景描述

1.两个表关联查询

2.table1 的数据量接近100万
3.table2 的数据量接近900万
4.查询条件中的title字段没有加索引
5.原始查询语句

SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title="衣服" or b.title="裤子" or b.title="帽子" limit 0,100

6.改造后的查询语句

SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title IN ("衣服","裤子","帽子") limit 0,100

改造后的效率

原sql的执行时间为5s,更改之后只需要0.01s

原因

查了一下资料,在数据量过百万,并且条件没有加索引,or的查询效率远远低于in,or的效率为O(n),而in的效率为O(logn), 当n越大的时候效率相差越明显。

参考文章:

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

你可能感兴趣的文章
Windows下面安装并运行composer的步骤
查看>>
JavaScript之tab面板切换
查看>>
Ubuntu 安装Samba服务器
查看>>
Git简单生成生成公钥和私钥方法
查看>>
Project Euler 35 Circular primes
查看>>
PHP面试题
查看>>
jquery.cookie中的操作
查看>>
页面缓存 cache
查看>>
并发编程之 CAS 的原理
查看>>
GNU make manual 翻译(二十六)
查看>>
@property(nonatomic,retain)
查看>>
Ext.data.SimpleStore的使用方法
查看>>
vimtutor
查看>>
使用HtmlAgilityPack抓取网页数据
查看>>
Notice: Trying to get property of non-object problem(PHP)解决办法 中间件只能跳转不能返任何数据...
查看>>
python判断一个对象是否可迭代
查看>>
用R画有图例的中国地图
查看>>
uCOS-ii笔记
查看>>
一个jdbc connection连接对应一个事务
查看>>
Redis 持久化之RDB和AOF
查看>>