2

只是想验证一下,数据库分区是只在数据库层面实现的,当我们查询一个分区表的时候,我们还是做正常的查询,我们的查询没什么特别的,解析查询的时候自动进行优化,对吗?

例如,我们有一个名为“address”的表,其中包含一个名为“country_code”和“city”的列。所以如果我想获得美国纽约的所有地址,通常我会做这样的事情:

select * from address where country_code = 'US' and city = 'New York'

如果现在该表按“country_code”分区,并且我知道现在查询将仅在包含 country_code = US 的分区上执行。我的问题是我需要在我的 sql 语句中明确指定要查询的分区吗?还是我仍然使用前面的语句,数据库服务器会自动优化它?

提前致谢!

4

2 回答 2

4

Jarod 的回答是正确的并且完全回答了这个问题,但我认为缺少一个重要的部分。

如果您的查询在分区列上不包含筛选条件,那么您可能会看到比在相同大小的未分区表上看到的性能更差。

如果您将查询更改为仅对 City 进行过滤,则它不会仅使用 US 分区,并且会比针对相同但未分区表的查询执行得更差。

分区可以帮助查询的唯一其他地方是加入具有相同分区键的分区表时。通常,该连接可以很容易地并行化。假设这不是你在做什么。

于 2010-06-08T17:05:45.540 回答
1

分区对您编写的任何查询都是透明的。无需指定要查询的分区。

数据库只是使用下面的分区进行相应的优化,理想情况下减少它需要根据你的 where 子句搜索的数据或索引的数量。

于 2010-04-21T01:45:21.863 回答