我在使用 PostgreSQLDialect 的 PostgreSQL 8.4 的相当大的项目中使用 Hibernate 3.3.2。
我们建立关系的方式最终会在表的外键属性上进行大量搜索。
出于性能原因,我希望在我们使用 hbm2dll.auto 创建表时让 Hibernate 将索引添加到所有外键列。
MySQL 会自动为这些列添加索引,但在 Postgres 中似乎没有办法做到这一点。
有没有我可以在某处设置的选项,或者我可以添加到我的 hbm.xml 文件中以实现此目的的选项?
最佳答案
这是一个快速查询,它会为模式中每个定义的外键的索引生成 DDL:
SELECT 'CREATE INDEX fk_' || conname || '_idx ON '
|| relname || ' ' ||
regexp_replace(
regexp_replace(pg_get_constraintdef(pg_constraint.oid, true),
' REFERENCES.*$','',''), 'FOREIGN KEY ','','') || ';'
FROM pg_constraint
JOIN pg_class
ON (conrelid = pg_class.oid)
JOIN pg_namespace
ON (relnamespace = pg_namespace.oid)
WHERE contype = 'f'
AND nspname = 'public';
这只在 PostgreSQL 8.4 中测试过,但我认为它应该适用于大多数 8.x 版本。
另请注意,这不会检测哪些已被索引覆盖,因此您可能会有一些重复。
关于hibernate - 让 Hibernate 生成外键索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970193/