2012-01-20 4 views
2

Я меняю свои старые пути ADO.Net для Entity Framework. Класс My Products состоит из примерно 20 таблиц (3 из которых я объединил до сих пор в один класс), также есть 5 таблиц типов продуктов, поэтому я создал класс Product Abstract, и каждый тип имеет свой собственный класс, используя прекрасное наследование, которое Entity Framework предоставляет с использованием методологии Table per Type, как показано ниже. Так эффективно 3 таблицы по классу продукта и 5 таблиц типов продуктов, каждый со своим собственным производным от Product.Entity Framework Сгенерированный SQL-таблица для каждого типа - Performant?

<there was a screenshot here, I don't have the rep to post it though!> 

Я следил за то, что делает это EDM под одеялом с SQL Server Profiler, как я работаю. Когда я бегу простой Linq к Entities запроса, как показано ниже:

var model = from p in Product.Products 
        where p.archive == false && ((Prod_ID == 0) || (p.ID == Prod_ID)) 
        select p; 

Который возвращает все виды продукции, которые не архивируются, и потенциально может иметь поиск идентификатора в там, а также, SQL Profiler показывает мне 800 линия кусок SQL !!

Это нормально? И это исполнитель? Или я отправил Entity Framework сумасшедшим?

<I tried to post the SQL too, but there was too much of it for the post> 

Так что, пожалуйста, просто проверка здравомыслия и любые советы!

С уважением,

Всех

ответ

0

Платформа Entity Framework может пнуть некоторые очень большие запросы, но в целом SQL Оптимизатор запросов сервера делает свое дело, и запрос выполняется с сервером едва заметив.

Помимо того, что я чувствую себя разумно, разумно, я лично не забочусь о производительности и оптимизации, пока анализ производительности не говорит мне, что у меня есть узкое место; если вы уже используете профилировщик SQL, требуется ли выполнение запроса относительно долго? Вы взглянули на план исполнения, и все выглядит нормально?

+0

Благодарим за отзыв. Запрос (который все еще находится в зачаточном состоянии, так как у меня есть еще 17 таблиц для добавления в мой класс (конечно, не все из них будут вызваны в 1 раз)), когда я его запускаю в SQL Management Studio занимает 4 секунды для запуска сначала, затем через 1 секунду после этого на последующих запусках. Фактический план выполнения - головокружительная коллекция вложенных циклов, индексов и вычислений сканера, хотя ничто не вырывается в качестве узкого места. Я думаю, что я просто сдерживаю слишком много класса продуктов. Если производительность становится проблемой, предложите ли вы использовать хранимые данные Procs & Function Imports? – MagicalArmchair

+0

Хммм - второй может быть довольно долго для запроса, который будет выполняться в значительной степени; возможно, вы могли бы: 1. удалить любые таблицы, которые в основном сводятся к значениям перечисления, 2. напишите SP, который делает тот же запрос, и посмотрите, будет ли он выполняться быстрее, 3. напишите индекс покрытия для рассматриваемых таблиц и посмотрите, помогает ли это , или 4. снова взгляните на дизайн класса 'Products' и то, как этот класс используется, и посмотрите, можете ли вы оставить некоторые элементы класса« ленивыми »после начальной загрузки. –