sql - 查询性能,多个 "OR' s"与单独的语句

标签 sql performance oracle scalability

假设我有一个 40MM 9 位邮政编码的 Oracle 数据库表,其中包括每个邮政编码的 4 位邮政编码。我有一个包含 800 个 5 位邮政编码的列表,我需要找到所有相关的 9 位邮政编码。总共有 40K 个 5 位邮政编码。假设我们已经使用 B*Tree(常规)索引对 5 位邮政编码字段进行了索引。考虑到数据库性能和可伸缩性,最好的方法是:

  1. 在一条语句中查询所有记录?像这样运行一次:

    SELECT * FROM ZIPCODE WHERE ZIP5 IN (:1, :2,... :800)

  2. 为每个 5 位邮政编码查询一次?像这样运行 800 次:

    SELECT * FROM ZIPCODE WHERE ZIP5 = :1

  3. 一些批量大小介于两者之间?

你怎么看,为什么?如果您处于思考状态,一些 [可选] 后续想法:

  • 我们可以运行哪些测试来验证您的想法?
  • 最佳方法是否会随着数量的变化而变化(例如,如果我们将 100 个 9 位邮政编码映射到 10 个 5 位邮政编码,寻找这 10 个中的 3 个)?
  • 数据库的最佳选择与吸收查询结果的应用服务器的最佳选择是否不同?

最佳答案

让数据库服务器决定如何处理它。即使它在内部执行 800 次查询,它仍然会更快。它只需解析一次查询,并且只需发送一次结果。

因此,使用 SELECT * FROM ZIPCODE WHERE ZIP5 IN (:1, :2,... :800)

关于sql - 查询性能,多个 "OR' s"与单独的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205581/

相关文章:

sql - 实现具有替代名称的人员数据库并将所有名称链接在一起

sql - Slick 中的纯 SQL - 如何将 postgres 数组列映射到列表?

performance - 您采用了哪些策略来提高 Web 应用程序的性能?

以下场景的 MYSQL 查询

sql - HEXTORAW() 函数如何工作?算法是什么?

sql - 连续序列的分区函数

c# - 关于INNER JOIN的正确使用

linux - 为什么我的代码在为性能分析 (-pg) 编译时,多线程运行速度比单线程运行速度慢?

html - oracle函数中div的固定宽度

sql - 通过立即执行创建表不起作用