postgre写sql时使用别的方法代替IN子句以提高查询效率

PostgreSQL根据IN查询按照数组位置排序 数组的索引编制从 1 开始。如果元素值为 NULL,则返回 NULL。返回 array 中第一次出现 element 的位置。一个 long 类型。 阅读详情

两种方法,自测都好使,60s的执行时间缩短到了2s左右

我遇到的问题大概是这样
比如说我写了个sql:

select * from student where name in('lilei','hanmeimei');

这就是在student表查名字是lilei hanmeimei的sql,假如说现在这个sql执行很慢,然后我发现只要把这个in子句去掉之后就变得很快,那这个时候肯定是要想办法替换掉这个in子句。

第一种:values子句
你可以按照下边这种写法,先把lilei hanmeimei这样的匹配元素模拟成一张表放在那,然后再用连接查询的方式来查询,这样会很快:

with params(name) as (
  values ('lilei'),('hanmeimei')
)

这就类似于你又搞出来一张表,里边只有lilei hanmeimei这俩数据,然后你原本的sql就可以改成这样:

select * from student s right join params p on s.name=p.name

第二种:exists函数
用这个函数的写法是这样的:

select * from student exists (select t2.* from student from student t2 where student.name=t2.name and t2.name in('lilei','hanmeimei'))

这种写法虽然没有替换掉in子句,但是他的原理也还是把通过in子句限制查询条件改成了连接查询,因为即使在子查询内部使用了in,单表的情况下也不会造成性能丢失,在子查询内就把单表内数据通过in子句维护出来,在外层就不会出现因为联表查询或者其他情况造成索引失效等查询速率很慢的情况了。

【postgresql 基础入门】带过滤条件的查询,where子句中的操作符介绍,案例展示,索引失效的大坑就在这里 在使用SQL查询数据时,一般不会查询全部数据,而是使用条件或者很多条件的组合来缩小结果集的范围,甚至精准查询到想要的数据。本文将介绍postgresql数据库中如何筛选过滤数据,如何设置条件,以及有那些操作符可以使用。 阅读详情

相关推荐

[译]PostgreSQL HAVING子句

PostgreSQL HAVING子句正文了解GROUP BY和HAVING子句的工作原理可以帮助写出更加高效的SQL。这里用一个真实例子来说明这一点。假设由2个表:country、invoice:select * from country; ctry_code ctry_name US USA CA Canada CN China .. .. 7 rowssel...

帅的数说 580

sql中用什么替代in

IN和EXISTS有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在where子句中可以使用两种格式的子查询。 第一种格式是使用IN操作符: ... where column in(select * from ... where ...); 第二种格式是使用EXIST操作符: ... where exists (select X from ...whe

持续改进 3万+

如何导入su_利用GIS快速生成SU场地模型

01|前言:进入2021年了,希望大家也是一个新的开始。告诫自己多写文章多更新,多读点书多旅行。然而元旦由于出去玩了4天,积累了一些事情要处理,一直没有时间好好写点东西。今天给大家带来的分享主题叫“利用GIS快速生成SU场地模型”。相关的视频方法其实B站上也有,但我相信视频很多人都不会看,我自己也是。直接给大家上操作流程。主要的操作步骤是【获取场地的矢量shp文件】—【导入ArcScen...

weixin_33806859的博客 9812

比in效率更高的sql查询语句

很多时候用 exists是一个好的选择: elect num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num) SELECT SUM(T1.C1)FROM T1 WHERE(  (SELECT COUNT(*)

山鹰的专栏 5077

从零到一:手把手教你用DaVinci Configurator配置一个完整的AUTOSAR接口通信实例

本文详细介绍了如何使用DaVinci Configurator工具配置AUTOSAR接口通信实例,从环境准备到SWC端口定义、BSW模块配置,再到通信验证的全过程。通过实战案例'车窗控制'功能模块,帮助开发者快速掌握AUTOSAR架构下的接口通信配置技巧,提升汽车电子软件开发效率。

weixin_42557830的博客 450

保姆级CVE-2018-17066漏洞复现 DLink命令注入漏洞(更新完结)

之后按照之前复现的方式一样 我们丢到kali中执行binwalk解析。之后为了模拟 可以在kali里安装qemu-mipsel。在bin目录下可以尝试将goahead的环境搭配好。固件官网可以进行下载。

weixin_51339377的博客 878

SQL优化必知技巧——使用exists 代替 in

SQL优化必知技巧——使用exists 代替 in in 谓词非常方便好用,而且代码也比较容易理解,所以使用非常频繁。但in却成为性能优化的瓶颈,本文通过示例给你详细说明。 示例数据及问题 员工参数课程培训数据,两次不同课程培训分别存在CLASS_A 和 CLASS_B 两张表中。 CLASS_A: id(编号) name(名称) 1 李承 2 李莉 3 李丽 CLAS...

neweastsun的专栏 2万+

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

Soly_kun的博客 733

SQL调优

SQL调优 1、很多时候用 EXISTS 代替 IN 是一个好的选择: SELECT * FROM class_a WHERE id IN ( SELECT id FROM class_b); 用下面的语句替换: SELECT * FROM class_a A WHERE EXISTS ( SELECT * FROM class_b B WHERE A.id = B.id); 上述两种方法查询结果一样,但exists 方式速度要快。分析如下: 如果连接列id 上有索引,那么查询CLASS_B时,无需查询

erciyuan_的博客 1266

数学建模学习(5):最全概率分析之图表绘制详解,内容比较多,建议收藏

(1) 绘制正整数频率使用 tabulate(X) (2)

全栈川川 4591

(一)深入理解Bluez协议栈之蓝牙Mesh的支持(1/5)

BlueZ是Linux官方蓝牙协议栈。它是一个基于GNU General Public License (GPL)发布的开源项目,从Linux 2.4.6开始便成为Linux 内核的一部分。如果你是linux平台开发蓝牙的的工程师,肯定会接触过Bluez协议栈,hciconfig,hciattach,hciconfig等工具都是很好用的工具。

3321

Postgre SQL in 问题

在pg库使用中,写查询语句免不了碰到很多 in(x,xx,xxx,xxxx,..,..) 这种情况,有时候里面的参数可能会很多,这样就会使得查询效率降低很多。基于上述情况为了提升查询效率可以考虑替换掉 in()。 通过表关联来替换 in(): 场景一:下面是aa,bb两张表的原始关联关系 SELECT * FROM aa WHERE abc IN (SELECT hh ...

dev_hui 的博客 4667

YOLOv13改进:注意力机制 | 动态稀疏注意力的双层路由方法BiLevelRoutingAttention | CVPR2023

BiLevelRoutingAttention方法对小目标检测效果比较好。可能是因为BRA模块是基于稀疏采样而不是下采样,一来可以保留细粒度的细节信息,二来同样可以达到节省计算量的目的。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1432

sql 中or与in的查询效率对比

原文链接:http://blog.chinaunix.net/uid-20639775-id-3416737.html 在网上一直看到的是or和in的效率没啥区别,一直也感觉是这样,前几天刚好在看《mysql数据库开发的36条军规》的文章,里面提到了or和in的效率问题,文中提到or的效率为O(n),而in的效率为O(logn), 当n越大的时候效率相差越明显。今天刚好有时间决定对心中的疑惑进行...

qq_38156033的博客 1247

SOC、SOH、OCV

1)放电实验法的测量SOH结果最为准确,但是深度放电会对影响电池的寿命;2)电阻折算法仅将电阻作为评价SOH的依据,但电池老化时电阻的变化范围较小,因此该方法的误差较大;3)电阻折算法需要对电池进行大量的实验,绘制成Map图,但是该方法有一定的局限性,针对不同的电池需要绘制不同的Map图;4)阻抗分析法是目前最为前沿的方法,可以根据阻抗谱较为直观的分析SOH的变化,但是该方法需要的成本较高,每台设备约为5万美元。

m0_61973119的博客 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

select in 在postgresql的效率问题

在知乎上看到这样一个问题: MySQL 查询 select * from table where id in (几百或几千个 id) 如何提高效率?修改 电商网站,一个商品属性表,几十万条记录,80M,索引只有主键id,做这样的查询如何提高效率?select * from table where id in (几百或几千个id)这些id没啥规律,分散的。。。。 ...

dgl19769的博客 727

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

postgre sql 括字段_SQL优化三步曲

原标题:SQL优化三步曲有一天开发同学反馈线上业务库中有一条SQL执行很满,每次几乎要跑1分钟才结束,希望我们帮忙优化一下,具体SQL如下:SQL优化第一步 - 查看执行计划对于一个SQL的优化,我们的第一步也是最重要的一步就是查看SQL执行计划,SQL执行计划一方面告诉我们SQL具体的处理行为,另外一方面也可以体现每个执行步骤下大致的资源消耗点。所以我们拿到问题SQL以及对应数据库环境后,登录该...

weixin_39883705的博客 167

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

postgre SQL优化

由于地图的数据很多,道路数量和poi数量都是千万级别的。 咱们的质检规则或者批处理常常需要在这些大表上做各种操作,这是一项很费时间的事情。 数据作业之后往往都要进行批处理、质检之后才能入库,确定没有问题才能交给数据运营的蚂蚁团队, (步行、车行导航的团队要根据我们提供的矢量数据规划路线,blu、aoi等有特定的用途。 如果数据不对,产生错误的导航信息,将降低用户对百度地图的

hzq20081121107的专栏 2000

postgre ~模糊查询慢解决方式

工作中遇到个情况 sql如下: SELECT org.id orgid,org."path" FROM ( SELECT * FROM A INNER JOIN t_org org ON ... INNER JOIN C org ON ... INNER JOIN D b ON ... INNER JOIN E bsns ON ....

weixin_33923762的博客 647

关于postgre核心内置函数的深入理解与实战总结

关于postgre核心内置函数的深入理解与实战总结

程序员码小跳 1万+

postgre sql 括字段_数据库SQL调优的几种方式

在项目中,SQL的调优对项目的性能来讲至关重要,所有掌握常见的SQL调优方式是必不可少的,下面介绍几种常见的SQL的调优方式,供借鉴.一.创建索引1.要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.(1)在经常需要进行检索的字段上创建索引,比如要按照表字段username进行检索,那么就应该在姓名字段上创建索引,如果经常要按照员工部门和员工岗位级别进行...

weixin_39792472的博客 299

postgre 查询表是否存在 dapper_SQL 查询语句总是先执行 SELECT?你们都错了

作者:Julia Evans译者:无明原文链接:https://jvns.ca/blog/2019/10/03/sql-queries-don-t-start-with-select/很多 SQL 查询都是以 SELECT 开始的。不过,最近我跟别人解释什么是窗口函数,我在网上搜索”是否可以对窗口函数返回的结果进行过滤“这个问题,得出的结论是”窗口函数必须在 WHERE 和 GROUP BY 之后...

weixin_39821378的博客 154

postgre的数组使用

今天受益匪浅,抛砖引出了大神的玉。    我的砖如下:    A表,字段有id,name和words,words字段以"|"为分隔符,如下:       B表,字段为words和numbers,但是words字段有所不同,具体如下:          需求为:通过表B中的“董事”或者“投资”或者“债券”或者其他词,此处我们默认按B表的number字段排序,limit3,然后去表A匹配出

Lenskit 2971

postgre sql any的一个优化技巧

id = any (array[32,231]) 优化成以下 id = any (VALUES (32),(160),(188),(231)) 在大量数据查询时优化效果明显

weixin_38230961的博客 1050

postgre sql递归查询

WITH RECURSIVE r AS (SELECT * FROM [表] WHERE id =xxxunion ALLSELECT [表].* FROM [表], r WHERE [表].id = r.parent_id)SELECT * FROM r ORDER BY id; 递归向上查询数据 转载于:https://www.cnblogs.com/snail90...

weixin_30480075的博客 383

postgre sql 数据库查询优化

摘要:PostgreSQL全文检索通过两个核心步骤实现高效搜索:1) 使用ALTER TABLE创建自动生成的"精华笔记"列(search_vector),利用to_tsvector进行分词和权重标记(标题A级/摘要B级);2) 通过CREATE INDEX建立GIN倒排索引,实现关键词快速定位。查询时采用三阶段处理:to_tsquery标准化查询词,@@操作符利用索引快速匹配,ts_rank_cd综合考虑命中次数、词距和权重进行评分。这种基于索引的"查字典"方式相比

weixin_74152658的博客 727
上一篇: sql一对多查询,且分组后组内根据字段排序
下一篇: git修改本地分支名称和远程分支名称
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值