Your EF Core query is correct. It returns the right row. The column has an index.
And SQL Server still reads the whole index to find one row.
The cause is one EF Core default that most C# developers never think about. In this post, I will show you the problem with a real demo, the one-line fix, and a checklist to find it in your own project.
TL;DR: EF Core sends C# strings as nvarchar by default. If your column is varchar , SQL Server converts the column and can scan the whole index. In my demo, one line of configuration, .IsUnicode(false) , cut logical reads from 887 to 3.
The Setup
Here is a simple table. The Email column is VARCHAR , and it has an index.
CREATE TABLE dbo . Customers ( Id INT IDENTITY ( 1 , 1 ) PRIMARY KEY , Email VARCHAR ( 100 ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , FullName VARCHAR ( 100 ) NOT NULL ) ;
CREATE INDEX IX_Customers_Email ON dbo .…