Используйте SQL Profiler для разработки, какие индексы создать, он разработан, чтобы решить, что информация для Вас и предлагает улучшенные профили выполнения.
у Вас есть внешние ключи на k3, k4?
Попытка, поворачивающаяся k1, k2 в ints и делающая их внешние ключи, это будет использовать намного меньше устройства хранения данных для одного, я думал бы, и я думаю, что это должно быть более быстро (хотя я могу быть неправым там, я предполагаю, что SQL Server кэширует эти значения). Главное, легче, если когда-нибудь необходимо обновлять значение. Вы просто меняете имя строки внешнего ключа - Вы не должны тогда обновлять 100 миллионов первичных ключей, или что бы то ни было.
Один хороший совет для улучшения скоростей запроса должен вставить подзапрос, который сокращает recordset размер к более managable.
В:
SELECT TOP(g) d1
FROM table WITH(NOLOCK)
WHERE k1 = a WHERE k2 = b WHERE k3 = c WHERE k4 = d WHERE k5 = e WHERE k6 = f
ORDER BY k7
то, Которое, я предполагаю, должно быть
SELECT TOP(g) d1
FROM table WITH(NOLOCK)
WHERE k1 = a AND k2 = b AND k3 = c AND k4 = d AND k5 = e AND k6 = f
ORDER BY k7
, вероятно, будет некоторый набор данных, которые сразу сокращают recordset по сравнению с, скажем 10 миллионов строк, к 10 000.
, например,
SELECT TOP(g) d1
FROM (SELECT *
FROM table k1=a AND k2=a WITH(NOLOCK))
WHERE AND k3 = c AND k4 = d AND k5 = e AND k6 = f
ORDER BY k7
Это предполагает, что можно сократить начальный набор данных в широком масштабе один или два из, ГДЕ аргументы - который почти бесспорен.
DBAs, вероятно, имеют больше, лучшие решения!
Можете ли вы опубликовать свой вспомогательный код xval и некоторые из ваших Html.Helpers?
Он принимает сущность и префикс, поэтому я не вижу почему структура в вашей модели представления должна иметь значение. Примерно так:
<%= Html.ClientSideValidation<Foo>("Foo") %>
<%= Html.ClientSideValidation<Bar>("Foo.Bar") %>
Джеймс
Если вы используете партиалы и передаете подтип, вам все равно необходимо пройти квалификацию. См. Следующее:
<%@ Control Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<MvcWeb.Models.OrderDetail>" %>
<% using (Html.BeginForm()) { %>
<fieldset>
<legend>Fields</legend>
<%= Html.Hidden("OrderId", Model.OrderId) %>
<%= Html.Hidden("ProductId", Model.ProductId)%>
<p>
<label for="Quantity">Quantity:</label>
<%= Html.TextBox("OrderDetails.Quantity", Model.Quantity)%>
<%= Html.ValidationMessage("OrderDetails.Quantity", "*") %>
</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
Обратите внимание, что это тип OrderDetails, но я все еще использую префикс для сообщений проверки.
Если я правильно прочитал, вы помещаете DataAnnotations в класс linq to sql, а затем заполняете свои свойства модели просмотра значениями из класса linq to sql.
Чтобы заставить это работать с xval, вам нужно поместить DataAnnotations в свойства модели представления. Насколько я могу судить по коду xval, он не смотрит за пределами общедоступных свойств для какой-либо информации о проверке (кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь).
Если вы хотите сделать проверку прозрачной между вашей моделью и моделью просмотра, вы Можно было бы пойти по пути использования postharp для привязки атрибутов, но это может быть большой работой с небольшим выигрышем, если ваша программа небольшая.