【发布时间】:2011-03-13 10:41:11
【问题描述】:
假设我有一个 40MM 9 位邮政编码的 Oracle 数据库表,其中每个邮政编码都包含 4 位邮政编码。我有一个包含 800 个 5 位邮政编码的列表,我需要找到所有相关的 9 位邮政编码。总共有 40K 个 5 位数的邮政编码。假设我们已经使用 B*Tree(常规)索引对 5 位邮政编码字段进行了索引。考虑到数据库性能和可扩展性,最好的方法是:
-
在一条语句中查询所有记录?像这样运行一次:
SELECT * FROM ZIPCODE WHERE ZIP5 IN (:1, :2,... :800)
-
对每个 5 位数的邮政编码查询一次?像这样运行 800 次:
SELECT * FROM ZIPCODE WHERE ZIP5 = :1
介于两者之间的一些批量大小?
你怎么看,为什么?如果您有思考的心情,一些 [可选] 后续想法:
- 我们可以运行哪些测试来验证您的想法?
- 最佳方法是否会随着数量的变化而变化(例如,如果我们将 100 个 9 位邮政编码映射到 10 个 5 位邮政编码,则查找这 10 个中的 3 个)?
- 数据库的最佳选择与吸收查询结果的应用服务器的最佳选择不同吗?
【问题讨论】:
标签: sql performance oracle scalability