LINQ к разбиению на страницы SQL и КОЛИЧЕСТВУ (*)

Я использую класс PagedList в своем веб-приложении, что многие из Вас могли бы быть знакомы с тем, если Вы делали что-нибудь с ASP.NET MVC и LINQ к SQL. Это было занесено в блог о Rob Conery, и подобное воплощение было включено в вещи как Ужин Компьютерного фаната и т.д. Это работает отлично, но мой DBA поставил вопросы о потенциальных будущих проблемах производительности.

Его проблема вокруг ИЗБРАННОГО КОЛИЧЕСТВА (*), который выпущен в результате этой строки:

TotalCount = source.Count();

Любое действие, которое разбило на страницы данных, исчерпает дополнительный запрос (как ниже) в результате IQueryable. Количество () вызов метода:

SELECT COUNT(*) AS [value] FROM [dbo].[Products] AS [t0] 

Существует ли лучший способ обработать это? Я рассмотрел использование свойства Count класса PagedList для получения количества объекта, но понял, что это не будет работать, потому что это только считает количество объектов в настоящее время отображаемым (не общее количество).

Сколько из хита производительности это вызовет к моему приложению, когда будет много данных в базе данных?

6
задан Ryan Rivest 12 February 2010 в 20:58
поделиться

2 ответа

Вот являются ссылкой к статье, написанной ScottGu

, На основе которого, я написал некоторый код, который я думаю, мог бы быть полезен

public interface IEducationalInstitute
{
    string Name
    {
        get; set;
    }

}

public class School : IEducationalInstitute
{
    private string name;
    #region IEducationalInstitute Members

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    #endregion
}

public class Student 
{
    public IEducationalInstitute LocalSchool { get; set; }

    public int ID { get; set; }
}

public static class JSONHelper
{
    public static string ToJSON(this object obj)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        return serializer.Serialize(obj);
    }
    public  static string ToJSON(this object obj, int depth)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        serializer.RecursionLimit = depth;
        return serializer.Serialize(obj);
    }
}

, И это - то, как вы назвали бы его

School myFavSchool = new School() { Name = "JFK High School" };
Student sam = new Student()
{
    ID = 1,
    LocalSchool = myFavSchool
};
string jSONstring = sam.ToJSON();

Console.WriteLine(jSONstring);
//Result {"LocalSchool":{"Name":"JFK High School"},"ID":1}

, Если я понимаю это правильно, я не думаю, что вы должны определить конкретный класс, который осуществляет интерфейс для преобразования в последовательную форму JSON.

-121--2042206-

iirc этот материал является частью статистики индекса и должен быть очень эффективным, вы должны попросить ваш DBA подытожить его опасения, а не преждевременно оптимизировать.

8
ответ дан 9 December 2019 в 20:43
поделиться

В некоторых базах данных (думаю, Oracle, Postgresql, SQL Server) ведется учет количества строк в системных таблицах; хотя иногда они точны только до момента последнего обновления статистики (Oracle). Вы можете использовать этот подход, если вам нужна только довольно точная, но не точная метрика.

Какую базу данных вы используете или это варьируется?

1
ответ дан 9 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: