2

我的应用程序使用 spring+hibernate+mysql。

我的一些表变得非常大,水平分区确实有利于我解决相关的性能问题。

我查看了 hibernate shards,但不喜欢它不在 maven repo 上并且它仍然被标记为“beta”的事实。

我正在考虑使用 mysql 分区功能并有一些问题:

如果我使用 mysql 创建分区,我可以像往常一样继续使用我的应用程序而不会出现任何休眠错误吗?

我知道我不能明确告诉休眠使用哪个 mysql 分区。但是,如果我使用休眠过滤器“建议”要针对哪个分区,mysql 会优化查询并使用正确的分区?

例子:

假设我按可以是 1、2、3、4 的列类型对我的表进行分区 - 每种类型都转到不同的分区。

如果我在此类型列上添加休眠过滤器,则最终查询将类似于:

从 mytable 中选择 blabla,其中 stuff AND type=3(休眠过滤器添加了 type = 3)。

mysql会捡起这个并像对待它一样对待它吗

从 mytable PARTITION (type3) where stuff 中选择 blabla

4

3 回答 3

2

虽然@YaK 关于数据位置是正确的,但出于性能原因,5.6 中的 MYSQL SELECT 语句允许您将分区指定为@samz 质疑。请参阅http://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html

于 2012-07-05T21:07:40.133 回答
1

MySQL 完成所有与查找数据可能/将要存储的分区相关的脏工作。从客户端的角度来看,表是否分区是完全透明的,查询保持不变。没有像SELECT col FROM mytable PARTITION(p);MySQL 这样的东西。

[编辑] 正如 TJChambers 所指出的,从SELECT col FROM mytable PARTITION(p);v5.6 开始确实存在,并允许显式手动分区修剪。

于 2012-07-03T22:44:37.940 回答
0

嘿,我们可以在这里使用 session.createsqlquery("Select blabla from mytable PARTITION (type3) where stuff "); 解决问题?Hibernate 支持原生 API。

谢谢桑吉夫·亚达夫

于 2013-07-04T08:57:36.477 回答