当前位置:首页 » 编程语言 » sql的in性能怎么样
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql的in性能怎么样

发布时间: 2023-05-19 02:35:45

A. sql中in和=的区别,大数据量哪个性能更好

大数据in的性能更好,=需要多次条件判断,小数据=更好

B. sql in好还是or好,我的条件有五六个以上,但用or的话感觉太长了,不知道哪个效率高点

自己没测试过,这两篇文章看着比较靠谱:

网页链接作者结论:如果in和or所在列有索引或者主键的话,or和in没啥差别,执行计划和执行时间都几乎一样。在没有索引的情况下,随着in或者or后面的数据量越多,in的效率不会有太大的下降,但是or会随着记录越多的话性能下降非常厉害

网页链接作者结论:总体来说,In的效率更高一些。

C. sql in语句的性能问题

每个机票订单含有多个票,用符合条件的订单List,去查询对应的票List。
两张表的关联方式是用一个特性的key关联,其中包含,代理商区分标余启喊志,订单号,订单类型等,是一个长度在30~50之间的varchar
遍历list一条一条查的话,IO太多,显然不合适旁档。我们就想到用in来实现批量查询

在beta测试时,库中表里只有一个月的数据,大约在1000万左右,测试时没有发现问题。
到了线上之后,发现查询数据非常慢,两万左右的in条件,查询起来,时间在10分钟左右,显然出现了慢查询。
针对这个问题,做了几个测试,看了下执行计划,如下所示

事实上我们看到,在in语句中数据量不大的情况下,索引是有效的,不过这个数量已经是极限了。

下面是我的语句

这里在in里面包含了三万条数据,索引实效了。

这里我们首先想到,强制使用索引会不会有所帮助如下

但是,事实上并没有效果,这是结果

解下来我们分析一下,两个问题,索引为什么会失效
这个问题需要从两个方面入手

1.索引区竖野分度
2.预计扫描行数
3.优化器的选择

先看第一个,索引的区分度,经过随机采样,看着内容还是很高的。

预计扫描行数
预计扫描行数的话,如前两图所示,基本都走了全表扫描。

优化器的选择
优化器选择时,衡量了回表等操作,综合考虑,这里没有办法继续下去了,只能问到DBA了。

在数据表大时,索引负重较大,同样的情况下,in语句里面数据条数够大时,索引会失效,可以通过force index尝试一下,不过成功的可能行很小,尽量分批去查找,批次数量可配置。

D. sql中in()效率低

对于in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

E. sql语句中条件查询里in、like、及=三个的效率怎么样

1、如果条件字段都是非索引字段,那么效率都差不多,就看结果大小。
2、有差别的在于条件字段是索引字段时:
=在所以的情况下都会进行索引扫描,所以效率总是高的。
like 当模糊查询为右模糊,比如'abc%'时,扫描索引,高效。
当模糊查询含左模糊时,比如'%abc',进行全表扫描,低效。
in的作用等同于or ,也是进行索引扫描,高效。

另外,in还可以连接查询结果集,这时往往会和exists做比较。
a、 select * from t1 where f1 in (select f1 from t2 where t2.fx='x'),

其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。

b、 select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx),

其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般效率不如exists,数据量大时,效果就更加明显。

F. sql中in 的效能好还是join的效能好

肯定派埋判是第一种快啊。
第一种一个语句,和第二种for里面单个语句的执行效率差异不大的。

in 语句,就是相当于 多个 or,尘改执行就是一次数据遍液李历,而for里面,几个语句是几次遍历。

G. 关于sql中in 和 exists 的效率问题,in真的效率低吗

exists效率快,因为培慧会吵盯用到索引,并且是有数据就返回,而in会每个配碰答都运算,并且不会用到索引。用不用索引,是指使用的列有索引的情况。

H. 记一次Sql执行从17分钟到3秒的优化

同事小A拿来了一段sql语句问我说为什么执行特别慢,跑一次要十多分钟。我试了一下,好家伙,最慢17分钟。语句如下:

其中TABLE1是一个数据记录表,VEMPLOYEE是一个员工表的视图,我看了一下视图定义,彻底被震惊了

小A解释说,客户要求有好多地方页面展示的时候要屏蔽一些员工,所以就直接搞了个员工视图来做统一的过滤处理。

在sql中使用 IN 或者 NOT IN 的性能是非常差的,至于具体原因,好多大佬解释的很清楚了,我就不再赘述。带颤那么第一步,就是使用LEFT JOIN替换掉语句里边的NOT IN
首先创建一个表 IGNORE_EMP_ID 存储需要忽略的员工ID,只有一个ID列,修改视图创建语句如下:

展示一下 LEFT JOIN 替换 NOT IN 的执行过程,假设EMPLOYEE表有ID为庆模1、2、3这三个员工,需要忽略的ID有1、3这两个

时得到的数据为:

修改的方法告诉了小A,过了几分钟,我就问他改的咋样,他说正在往新建的 IGNORE_EMP_ID 表插数据。那好吧,我来帮忙插数据好了。
前面介绍过原来的sql里边都是一行一个数字排列的,我们把 NOT IN 里边的所有誉行缓ID复制出来到txt文件

然后回车拉至最后一行,复制出B列所有sql执行即可。

I. 较大量数据的多表关联,SQL JOIN 和 IN 性能区别大吗

JOIN表示连备族接两个表,分为外连接和内连接,通常用于带出关联关系的其他表的字段信息,比如我这里有用户ID想查出,用毕裤户的姓名,可以外仿数弊连接用户表,带出姓名字段。
IN这个关键字有性能要求,如果IN里面的选项大于1000个,性能下降的非常快,可以用exist来代替 ,具体用法可以查一下,资料有一堆。

J. 关于sql中in 和 exists 的效率问题,in真的效率低吗

关于sql中in 和 exists 的效率问题,in真的效率低吗
in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

如果两个表中一个较缺哪物小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如缓没:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)
效率伏液低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。