【问题标题】:How do I create an index over multiple fields using NHibernate 3.2 mapping by code?如何使用 NHibernate 3.2 通过代码映射在多个字段上创建索引?
【发布时间】:2012-04-23 02:56:29
【问题描述】:

在 NHibernate 3.2 代码映射中,您可以像这样索引给定字段:

mapper.Class<Customer>(map =>
{
    map.Property(x => x.Address, m => m.Index("AddressIndex"));
});

我想创建一个涵盖以下字段的索引:

  • 地址
  • 名字
  • 姓氏

我在“map”对象上没有看到 Index 方法,也没有看到允许您指定其他列的属性特定 Index 方法的重载。我怎样才能做到这一点?

编辑,我发现如果我执行以下操作:

mapper.Class<Customer>(map =>
{
    map.Property(x => x.Address, m => m.Index("AddressIndex"));
    map.Property(x => x.FirstName, m => m.Index("AddressIndex"));
    map.Property(x => x.LastName, m => m.Index("AddressIndex"));
});

创建了一个涵盖所有 3 列的索引,但不是按照我指定的顺序。有没有办法指定索引中的列顺序?

【问题讨论】:

  • 顺序重要吗?我总是被引导相信顺序无关紧要,因为它们不是关键列并且存储在索引的叶页中。

标签: nhibernate nhibernate-mapping


【解决方案1】:

如果顺序确实很重要,那么一种选择是在生成架构后创建并执行脚本。

我记得读过这篇关于 composite indexes 的文章,似乎顺序可能或可能重要!

【讨论】:

  • 订单绝对重要。通过将最有选择性的列放在首位(SQL 仅生成索引中第一列的统计信息),SQL Server 能够预先过滤掉最垃圾的列。我不知道这是否适用于其他数据库平台。顺便说一句,我还没有弄清楚这一点。
  • 那么你需要在你的模式生成之后执行脚本。
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 2012-04-09
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多