gpt4 book ai didi

entity-framework - Entity Framework 包含对 varchar 列的查询

转载 作者:行者123 更新时间:2023-12-01 06:39:36 25 4
gpt4 key购买 nike

我有以下 Code First 实体:

public class Department
{
public int DepartmentID { get; set; }
public string DepartmentName { get; set; }
}

我设置的配置如下表:
dbo.Departments
DepartmentID INT PRIMARY KEY
DepartmentName VARCHAR(75)

我手动向 DepartmentName 添加了索引并运行以下查询:
var depts = new string[] { "Engineering", "Manufacturing" };
var departments = from d in db.Departments
where depts.Contains(d.DepartmentName)
select d;

当我运行跟踪时,它生成了以下 SQL:
SELECT 
[Extent1].[DepartmentID] AS [DepartmentID],
[Extent1].[DepartmentName] AS [DepartmentName]
FROM [dbo].[Departments] AS [Extent1]
WHERE [Extent1].[DepartmentName] IN (N'Engineering',N'Manufacturing')

由于我的列是 varchar 并且查询正在将文本转换为 NVARCHAR,优化器选择对我的 DepartmentName 索引执行聚集索引扫描而不是索引查找。

除了更改我的数据库以使用 nvarchar 之外,还有什么方法可以解决这个问题?这是错误还是正常?

最佳答案

如果您的索引数据表很小,这是可以预料的。

SQL 将从磁盘读取的最小数据量是 8k(一页),因此如果它使用索引,则需要访问磁盘两次,一次用于索引,一次用于数据。如果所有数据都适合一个8k数据页,那么无论如何都可以一口气读取,因此使用索引会增加不必要的磁盘IO。

关于entity-framework - Entity Framework 包含对 varchar 列的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com