pba*_*nis 9 entity-framework ef-core-2.0
正如Entity Framework Indexing ALL foreign key columns 等问题中所述,EF Core 似乎自动为每个外键生成一个索引。这对我来说是一个合理的默认值(让我们不要在这里进行意见战......),但在某些情况下,这只是浪费空间并减慢插入和更新的速度。我如何根据具体情况预防它?
我不想完全关闭它,因为它利大于弊;我不希望有手动进行配置,所有这些指标我做想。我只是想在特定的FK上阻止它。
相关的问题:EF 文档中的任何地方都提到了自动创建这些索引的事实吗?我在任何地方都找不到它,这可能是我找不到如何禁用它的原因?
有人肯定会质疑我为什么要这样做......所以为了节省时间,链接问题的操作员在评论中给出了一个很好的例子:
例如,我们有一张
People
桌子和一张Addresses
桌子。该People.AddressID
FK是由EF索引,但我只从开始People
行和搜索Addresses
记录; 我从来没有找到Addresses
一行然后在该People.AddressID
列中搜索匹配的记录。
如果确实有必要避免在 .Net Core 中使用某些外键索引(据我所知(目前)),则有必要删除在生成的迁移代码文件中设置索引的代码。
另一种方法是结合属性或扩展方法来实现自定义迁移生成器,以避免创建索引。您可以在 EF6 的答案中找到更多信息:EF6 Preventing not to create Index onforeign Key。但我不确定它是否也适用于.Net Core。方法似乎有点不同,这里有一篇MS 文档文章应该有所帮助。
但是,我强烈建议不要这样做!我反对这样做,因为您必须修改生成的迁移文件,而不是因为不使用 FK 索引。就像您在问题评论中提到的那样,在现实世界中,某些情况需要这种方法。
对于其他人来说,他们不确定是否必须避免在 FK 上使用索引,因此他们必须修改迁移文件:
在您这样做之前,我建议使用 FK 上的索引来实现应用程序,并检查性能和空间使用情况。因此我会产生很多测试数据。如果它确实导致测试或 QA 阶段的性能和空间使用问题,仍然可以删除迁移文件中的索引。
因为我们已经在这里讨论了EnsureCreated
vsmigrations
以获得完整的有关 EnsureCreated 和迁移的更多信息(即使您不需要它:-)):
归档时间: |
|
查看次数: |
5567 次 |
最近记录: |