gpt4 book ai didi

java - PostgreSQL 多个 'WHERE' 条件(1000+)请求

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:18 25 4
gpt4 key购买 nike

我根本不是 SQL 专家 :)有一个非常关键的性能问题。这是与问题直接相关的信息。

我的数据库中有 2 个表 - 表 condos 和表 goods

condos 有字段:

  • 身份证(主键)
  • 姓名
  • 城市
  • 国家

表项:

  • 身份证(主键)
  • 姓名
  • 与问题无关的多个字段
  • condo_id (FK)

condos 表中有 1000 多个实体,items 表中有 1000 多个实体。

问题是我如何执行项目搜索

目前是:

例如,我想获取city = Sydney的所有项目

  1. 执行 SELECT condos.condo_id FROM public.condos WHERE city = 'Sydney'
  2. 为我在步骤 1 中获得的每个 condo_id 创建一个 SELECT * FROM public.items WHERE item.condo_id = ?

问题是,一旦我在 condos 表中获得 1000 多个实体,对于属于“Sydney”的每个 condo_id 都会执行 1000 多次请求。此请求的执行时间超过 2 分钟,这是一个关键的性能问题。

所以,问题是:

执行此类搜索的最佳方式是什么?我应该在单个 WHERE 请求中放置 1000 多个 ID 吗?或者?

为了添加信息,我使用 PostgreSQL 9.4Spring MVC

最佳答案

使用表join 执行查询,这样您就不需要执行额外的查询。在您的情况下,您可以通过 condo_id 加入 condositems,类似于:

SELECT i.* 
FROM public.items i join public.condos c on i.condo_id = c.condo_id
WHERE c.city = 'Sydney'

请注意,性能调优是一个董事会主题。它可能因环境而异,取决于您如何构建表中的数据以及如何在代码中组织数据。

以下是一些可能也有帮助的其他建议:

尝试为您使用排序和搜索的字段添加索引,例如condos 中的 cityitems 中的 condo_id。有个好answer解释索引的工作原理。

我还建议您执行EXPLAIN 为您的查询设计一个查询计划是否存在可能导致性能问题的全表搜索。

希望对您有所帮助。

关于java - PostgreSQL 多个 'WHERE' 条件(1000+)请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com