返回顶部
首页 > 资讯 > 数据库 >如何探讨select in 在postgresql的效率问题
  • 256
分享到

如何探讨select in 在postgresql的效率问题

2024-04-02 19:04:59 256人浏览 薄情痞子
摘要

如何探讨select in 在postgresql的效率问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在知乎上看到这样一个问题:

如何探讨select in 在postgresql的效率问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

在知乎上看到这样一个问题:

Mysql 查询 select * from table where id in (几百或几千个 id) 如何提高效率?修改

电商网站,一个商品属性表,几十万条记录,80M,索引只有主键id,做这样的查询如何提高效率?

select * from table where id in (几百或几千个id)

这些id没啥规律,分散的。。。。

看了一下答案,感觉有好多不靠谱的,但是口说无凭,所以在我的电脑上写了几个查询测试一下。我用的是Postgresql9.4,但感觉mysql应该也差不多,首先创建一个简单表,只有简单的3列,在这个问题的下面好多人提到了需要看表的大小,其实这个问题和表大小无关,只和index的大小有关,因为是index是建立在int上的,所以只和纪录数目有关。

Table "public.t9"Column | Type | Modifiers--------+----------------+-----------c1 | integer |c2 | character(100) |c3 | character(200) |Indexes:"i1" UNIQUE, btree (c1)insert into t9 values(generate_series(1000,500000,1),repeat('a',90),repeat('b',180));

之后生成一些随机数,Mac上用jot,linux上用shuf

for ((i=0;i<100000;i++))dojot -r 1 1000 600000 >>rand.filedone

然后根据rand.file 生成查询语句:

select * from t9 where c1 in (494613,575087,363588,527650,251670,343456,426858,202886,254037,...1);

分别生成3个sql文件,in内变量的数目分别是100,1000和10000个,执行这3个sql文件,看看时间

try psql study -f test_100.sql -o /dev/nullLOG: duration: 2.879 mstry psql study -f test_1000.sql -o /dev/nullLOG: duration: 11.974 mstry psql study -f test_10000.sql -o /dev/nullLOG: duration: 355.689 ms

可以看到只有在in内数据到了10,000个的时候数据时间会有比较大的变化,但也不过是在300多ms内完成。

那如果按照有些回答那样,先建一个临时表,然后用in subquery,并且希望这时候可以两表join呢?为了简单我直接用两表join了

drop table t_tmp;create table t_tmp(id int);insert into t_tmp (id) values(494613),(575087),(363588),(345980),...(1);select t9.* from t9, t_tmpwhere t9.c1 = t_tmp.id;

时间如何呢?

try psql study -f test_create_10000.sql -o /dev/nullLOG: duration: 2.078 msLOG: duration: 1.233 msLOG: duration: 224.112 msLOG: duration: 322.108 ms

除去drop和create的时间,依然花费了500+的时间,这里的前提还是我用的ssd盘,所以写LOG的时间会快很多。为什么会这么慢呢?用explain看一下,这时候数据量较大,直接走Merge join 了

那1000行数据的效率如何呢?

try psql study -f test_create_1000.sql -o exp.outLOG: duration: 2.476 msLOG: duration: 0.967 msLOG: duration: 2.391 msLOG: duration: 8.780 ms

100行的数据如下:

try psql study -f test_create_100.sql -o /dev/nullLOG: duration: 2.020 msLOG: duration: 1.028 msLOG: duration: 1.074 msLOG: duration: 1.912 ms

可以看到在100个值和1000个值的情况下create table的方式不会比直接在in里面写所有的变量好多少,explain看的话是在用NLJ了。但在数据量更大(按照原问题,这里in的数量其实无法预知)的情况下效率只会更低,再加上额外的表维护成本和多余的SQL语句,DBA肯定不喜欢的,还是相信数据库,放心大胆直接用in list来搞定这些问题吧。

看完上述内容,你们掌握如何探讨select in 在postgresql的效率问题的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: 如何探讨select in 在postgresql的效率问题

本文链接: https://lsjlt.com/news/68938.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何探讨select in 在postgresql的效率问题
    如何探讨select in 在postgresql的效率问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在知乎上看到这样一个问题:...
    99+
    2024-04-02
  • MYSQL的IN查询效率慢的问题
    最近项目的老代码又出问题了,mysql的in查询一次查询了5万个数据,cpu一下飙升到100%,这条查询sql也运行的近600s,那么是什么原因导致mysql的in查询效率如此之低,并且没有走索引呢?...
    99+
    2023-09-10
    mysql 数据库
  • 如何解析Oracle中exists与in的执行效率问题
    如何解析Oracle中exists与in的执行效率问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。in 是把外表和内表作ha...
    99+
    2024-04-02
  • 探讨如何在Vue中避免图片变形问题
    Vue是一种流行的JavaScript框架,它在开发现代Web应用程序方面非常有用。在Vue中添加图像是一个常见需求,但很多时候我们会遇到这样的问题:当图片尺寸与容器尺寸不同时,图片会变形。这篇文章将探讨如何在Vue中避免图片变形。为什么会...
    99+
    2023-05-14
  • 探讨如何解决Golang的文件乱码问题
    最近学习 Golang 的过程中,遇到了一个非常让人头疼的问题——文件乱码。在这篇文章中,我们将探讨如何解决 Golang 中的文件乱码问题。一、文件编码在讨论如何解决 Golang 中的文件乱码问题之前,我们需要了解有关文件编码的一些基础...
    99+
    2023-05-14
  • redis内存空间效率问题的深入探究
    前言 在使用redis时,我们会遇到一个问题,数据删除后,数据量已经不大了,但是使用top命令查看,还会发现redis占用了很对内存。实际上,因为数据删除后,redis释放内存由内存...
    99+
    2024-04-02
  • 如何探讨C++、C#和JAVA中webservice互操作问题
    今天就跟大家聊聊有关如何探讨C++、C#和JAVA中webservice互操作问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先,分别介绍一下C++、C#和JAVA。c++用的是...
    99+
    2023-06-17
  • 探讨如何处理Git公共分支代码污染的问题
    随着软件开发的快速迭代以及多人协同开发的需求,代码管理工具成为每个开发者必备的利器。而Git,作为目前最流行的分布式版本控制系统,已经成为了技术领域中不可或缺的组件之一。但是,在多人协同开发的过程中,有时会发生公共分支代码污染的情况,这会严...
    99+
    2023-10-22
  • 热门问题python爬虫的效率如何提高
    目录简单版本爬虫多线程版本爬虫多进程版本爬虫协程版本爬虫结论 文 | 闲欢 来源:Python 技术「ID: pythonall」 今天在浏览知乎时,发现一个有趣的问题:如...
    99+
    2024-04-02
  • mysql倒序查询效率问题如何解决
    在执行MySQL倒序查询时,主要的性能问题通常出现在ORDER BY子句上,特别是在大型数据集上。以下是一些解决这些性能问题的方法:...
    99+
    2024-04-12
    mysql
  • 如何解决MongoDB谨防索引seek的效率问题
    这篇文章主要介绍如何解决MongoDB谨防索引seek的效率问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景最近线上的一个工单分析服务一直不大稳定,监控平台时不时发出数据库操作...
    99+
    2024-04-02
  • 多线程如何解决for循环效率的问题
    多线程解决for循环效率问题 在for里面,如果执行一次for里面的内容所需时间比较长,可以使用线程池来提高for循环的效率 public class TreadFor { pr...
    99+
    2024-04-02
  • JS数组在内存中的效率问题浅析
    目录JS数组效率比较举个栗子非连续内存问题总结JS数组 我们所熟知的JS数组的结构和其他语言数组结构类似,即物理内存是连续的,所以这也就导致了数组成员移动次数越少,其效率越高,一般数...
    99+
    2024-04-02
  • 如何解决Spring in action @valid验证不生效的问题
    解决Spring in action @valid验证不生效 按照书上的示例代码来实现但是,添加了验证但是没有生效。 Spring提供了校验Api是使用但是没有提供实现,所以需要自己...
    99+
    2024-04-02
  • 探讨如何解决多页面应用程序中Vue.js首屏慢的问题
    Vue.js 是一款流行的前端 JavaScript 框架,使得从前端开发者的角度更轻松地管理和渲染页面。然而,在使用 Vue.js 构建多页面应用程序时,可能会遇到一个显著的问题:首屏加载缓慢。本文将探讨如何解决多页面应用程序中 Vue....
    99+
    2023-05-14
  • C# 解决在Dictionary中使用枚举的效率问题
    使用字典的好处 System.Collections.Generic命名空间下的Dictionary,它的功能非常好用,且功能与现实中的字典是一样的。 它同样拥有目录和正文,目录用来...
    99+
    2024-04-02
  • 探讨PHP如何处理文件不存在的情况
    在开发PHP应用程序时,经常需要访问文件系统。有时,您需要检查文件是否存在,并相应地处理它们的存在或不存在。在本文中,我们将探讨PHP如何处理文件不存在的情况。当您使用PHP访问文件系统时,有几种方法可以检查文件是否存在。其中一种方法是使用...
    99+
    2023-05-14
    php
  • LeetCode算法题中,Python的效率如何?
    LeetCode是一个非常流行的算法题库,其中包含了各种不同难度级别的算法题目。对于算法爱好者来说,LeetCode是一个非常好的练习平台。在LeetCode上,Python是一种非常受欢迎的编程语言,但是在某些情况下,Python的效率...
    99+
    2023-11-06
    leetcode 大数据 关键字
  • JS数组在内存中效率问题的示例分析
    这篇文章给大家分享的是有关JS数组在内存中效率问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JS数组我们所熟知的JS数组的结构和其他语言数组结构类似,即物理内存是连续的,所以这也就导致了数组成员移动...
    99+
    2023-06-29
  • 如何分析SQL Server中的SQL语句优化与效率问题
    今天就跟大家聊聊有关如何分析SQL Server中的SQL语句优化与效率问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。很多人不知道SQL语句在S...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作