記述しようとしているクエリのパフォーマンスに問題があります。その中に約6000のレコードを含むテーブルがあります。
現在、開発マシンで実行するのに約 15 秒かかります。vs2012 および sql2012 を実行する 32 GB RAM クアッドコアを搭載した win8 マシン。だから、それは私のマシンではなく、私の悪いコードです。
public IEnumerable<Customer> GetByStoreIdAndContainingName(Guid storeId, string containing)
{
using (var context = new Entities())
{
var store = context.Stores.FirstOrDefault(b => b.StoreId == storeId);
if (store == null) return null;
var business = store.Business;
var consumers = new List<Consumer>();
consumers =
business.ConsumerIdentities.Select(ci => ci.Consumer)
.Distinct()
.Where(x => x.FirstName.ToLower().Contains(containing.ToLower()))
.ToList();
データベース テーブルのレイアウトは次のとおりです。
仕事
BusinessId
名前
など
StoreId
StoreId
StoreName
BusinessId
消費者
ConsumerId
FirstName
LastName
消費者のアイデンティティ
BusinessId
ConsumerIdentityType
ConsumerIdentityValue
クエリ結果を返すのに非常に時間がかかる、私が間違っている明らかなことを誰でも見ることができますか?
SQL プロファイラーをオンにするのは怖かったです。最初に行われたクエリは、ビジネス ID が一致する ConsumerIdentity テーブルからすべてを選択することでした。それならビジネステーブルテーブルを手に入れるのに最適です。
ただし、次のようなすべてのレコードに対して呼び出しを行うようです
exec sp_executesql N'SELECT
[Extent1].[ConsumerId] AS [ConsumerId],
[Extent1].[UserID] AS [UserID],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
[Extent1].[IsMale] AS [IsMale],
[Extent1].[DateOfBirth] AS [DateOfBirth],
FROM [dbo].[Consumer] AS [Extent1]
WHERE [Extent1].[ConsumerId] = @EntityKeyValue1',N'@EntityKeyValue1 uniqueidentifier',@EntityKeyValue1='952ED7B8-2123-49E2-BAE3-69FBD713BACB'
私のwhereステートメントが適用されていないようです