Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
1

Оптимизация вывода большого (более 7000) количества записей на странице

13.02.2020, 09:09. Просмотров 534. Ответов 22
Метки нет (Все метки)

Здравствуйте.

Прошу совета, как сделать более оптимальным решение.

Имеется справочник КБК. Модель:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public partial class SprKBKBudgetRevenues
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public SprKBKBudgetRevenues()
        {
            this.DataBudgetRevenues = new HashSet<DataBudgetRevenues>();
        }
    
        public System.Guid Id { get; set; }
        public string CODE { get; set; }
        public string NAME { get; set; }
        public string LEVEL { get; set; }
        public System.Guid SprYearId { get; set; }
        public System.DateTime CREATE { get; set; }
        public System.DateTime EDIT { get; set; }
    
        public virtual SprYear SprYear { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<DataBudgetRevenues> DataBudgetRevenues { get; set; }
    }
Есть таблица, куда планировал вносить выбранные Пользователем записи. Модель:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public partial class DataBudgetRevenues
    {
        public System.Guid Id { get; set; }
        public System.Guid SprBudjetId { get; set; } // По данному Id группируются объекты
        public System.Guid SprGeneralAdminId { get; set; } // Id справочника раздела
        public System.Guid SprKBKBudgetRevenuesId { get; set; } // Id справочника подраздела
        public string CODE { get; set; } // Корректировка када пользователя данных из справочника SprKBKBudgetRevenuesId
        public string NAME { get; set; } // Корректировка названия пользователя данных из справочника SprKBKBudgetRevenuesId
        public System.DateTime CREATE { get; set; } // Дата создания записи
        public System.DateTime EDIT { get; set; } // Дата последнего редактирования записи
    
        public virtual SprBudjet SprBudjet { get; set; }
        public virtual SprGeneralAdmin SprGeneralAdmin { get; set; }
        public virtual SprKBKBudgetRevenues SprKBKBudgetRevenues { get; set; }
    }
Логика

Планировал сделать следующим образом - на странице выводится в компактном виде список КБК из справочника SprKBKBudgetRevenues, возле каждой записи кнопка "Ввести" по которой данныая запись записывается в таблицу DataBudgetRevenues.

Сейчас не могу для себя определиться как выводить данные на страницу? На данный момент реализовано в виде двух циклов первый для вывода в таблицу на странице записей из DataBudgetRevenues, ниже второй цикл для вывода записей из справочника SprKBKBudgetRevenues.

Основная проблема в том, что в справочнике более 7500 записей. Общий вес страницы более 3,5 Мб. Поэтому загрузка происходит долго и медленно. Функционально все работает так как мне нужно, но явно не оптимально.

Хотел бы услышать любые советы по тому, как можно было бы оптимизировать вывод данных.

Вот так вывожу в HTML
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
@model IEnumerable<ClassLibrary.DataBudgetRevenues>
<!-- Normal Table area Start-->
<div class="normal-table-area">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                <div class="normal-table-list">
                    <div class="basic-tb-hd">
                        <h2>Basic Table</h2>
                        <p>Basic example without any additional modification classes</p>
                    </div>
                    <div class="bsc-tbl">
                        <table class="table table-sc-ex">
                            <thead>
                                <tr>
                                    <th></th>
                                    <th>Название</th>
                                    <th>Уровень</th>
                                    <th>Год</th>
                                    <th></th>
                                </tr>
                            </thead>
                            <tbody>
                                @foreach (var item in Model)
                                {
                                
                                    <tr>
                                        @*<td>
                                            @Html.DisplayFor(modelItem => item.SprGeneralAdmin.Id)
                                        </td>*@
                                        <td>
                                            @Html.DisplayFor(modelItem => item.SprGeneralAdmin.Id) - @Html.DisplayFor(modelItem => item.CODE)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(modelItem => item.NAME)
                                        </td>
                                        <td>
                                            @Html.DisplayFor(modelItem => item.SprKBKBudgetRevenues.NAME)
                                        </td>
                                        <td>
                                            @*@Html.DisplayFor(modelItem => item.SprYear.Year)*@
                                        </td>
                                        <td>                                            
                                            <a asp-action="Create">Добавить</a>
                                        </td>
                                    </tr>
                                    
                                }
                            </tbody>
                            <tfoot>
                                <tr>
                                    <th>Код</th>
                                    <th>Название</th>
                                    <th>Уровень</th>
                                    <th>Год</th>
                                    <th></th>
                                </tr>
                            </tfoot>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- Normal Table area End-->
<!-- Список всех КБК-->
<!-- Data Table area Start-->
<div class="data-table-area">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
                <div class="data-table-list">
                    <div class="basic-tb-hd">
                        <h2>Справочник КБК</h2>
                        <p>Справочник основных КБК</p>
                    </div>
                    <div class="table-responsive">
                        
                            <table id="data-table-basic" class="table table-striped">
                                <thead>
                                    <tr>
                                        <th></th>
                                        <th>Название</th>
                                        <th>Уровень</th>
                                        <th>Год</th>
                                        <th></th>
                                    </tr>
                                </thead>
                                <tbody>
                                    @foreach (var sprKBK in ((IEnumerable<ClassLibrary.SprKBKBudgetRevenues>)ViewBag.SprKBKBudgetRevenues))
                                    {
                                        <tr>
 
                                            <td>
                                                <div>
                                                    <input readonly style="border:none" type="text" placeholder="@Html.DisplayFor(modelItem => sprKBK.CODE)">
                                                </div>
 
                                            </td>
                                            <td>
                                                @Html.DisplayFor(modelItem => sprKBK.NAME)
                                            </td>
                                            <td>
                                                @Html.DisplayFor(modelItem => sprKBK.LEVEL)
                                            </td>
                                            <td>
                                                @Html.DisplayFor(modelItem => sprKBK.SprYear.Year)
                                            </td>
                                            <td>
                                                <a href="@Url.Action("Index", "Home", new { SprKBKBudgetRevenuesId = sprKBK.Id })" class="btn btn-success notika-btn-success">Домой</a>
                                            </td>
 
                                        </tr>
 
                                    }
                                </tbody>
                                <tfoot>
                                    <tr>
                                        <th></th>
                                        <th>Название</th>
                                        <th>Уровень</th>
                                        <th>Год</th>
                                        <th></th>
                                    </tr>
                                </tfoot>
                            </table>
                        
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- Data Table area End-->
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2020, 09:09
Ответы с готовыми решениями:

Оптимизация большого количества NPC на карте
Пытаюсь сделать Терарию на C#(без Unity и т.д).В этой игре есть довольно большая карта, на которой...

Оптимизация обработки большого количества объектов
Доброго времени суток, господа. У меня есть графическая программа на основе SFML. В программе...

Оптимизация большого количества пользовательских элементов управления
Задача такова: необходимо создать элемент управления с предложением в котором выделяется каждое...

Оптимизация хранения большого количества объектов в Dictionary
Добрый день. Имеется некий класс Quest и список public static Dictionary&lt;Subject, Dictionary&lt;byte,...

Оптимизация insert в таблицу большого числа строк (100000 и более)
Добрый день! Задача такая - используя задачу по расписанию (vbs-скрипт) перелить из одной таблицы...

22
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
13.02.2020, 09:30 2
постраничный вывод
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
13.02.2020, 10:28  [ТС] 3
Цитата Сообщение от yurickas Посмотреть сообщение
постраничный вывод
На уровне запроса к БД? Тогда поиск по таблице не будет работать, тот который сейчас реализован, придется свой писать на JS, а я в нем ни как... Только начал смотреть "AJAX-запросы с помощью jQuery" на METANIT.COM

Есть вариант подсказать такой поиск по модели SprKBKBudgetRevenues где поиск только по полям CODE и NAME. Или ссылку на stackoverflow.com
0
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
13.02.2020, 10:42 4
Цитата Сообщение от defond57 Посмотреть сообщение
Тогда поиск по таблице не будет работать,
Кто такое сказал?
Все работает нормально, если все нормально написано, а не костылями на велосипедах.

В контроллере получаешь данные для страничного вывода и поиска, проводишь выборку и отдаешь ее в представление. Ничего сложного.
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
13.02.2020, 10:50  [ТС] 5
Цитата Сообщение от yurickas Посмотреть сообщение
Кто такое сказал?
Все работает нормально, если все нормально написано, а не костылями на велосипедах.
Я говорю. Сейчас у меня поиск реализован библиотекой шаблона и ведется по данным таблицы уже загруженной на страницу без обращения к БД. Ну вот такой шаблон.

Цитата Сообщение от yurickas Посмотреть сообщение
В контроллере получаешь данные для страничного вывода и поиска, проводишь выборку и отдаешь ее в представление. Ничего сложного.
Согласен - сделать в контролере выборку ограниченного числа записей из БД путем запроса и последующий вывод на страницу - вообще не проблема.
Но тогда нужно по идее организовать возможность поиска записи в БД по двум полям силами JS. А я в JS вообще ни как - только начал изучать. Поэтому и спрашиваю - есть возможность дать ссылку на пример или показать здесь?
0
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
13.02.2020, 11:34 6
1. Учи JS. Но работать в MVC с JS не очень интересно.
2. Переделай на постраничный вывод через контроллер. Я думаю так будет лучше и быстрее, не надо будет насиловать БД выгрузкой толстых запросов.

Примеры, ссылки и пр. я не даю принципиально. Пока сам не научишься - будешь все время спрашивать. А если работать по методу Ctrl+C => Ctrl+V, но ничему не научишься
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
13.02.2020, 11:37  [ТС] 7
Цитата Сообщение от yurickas Посмотреть сообщение
Примеры, ссылки и пр. я не даю принципиально. Пока сам не научишься - будешь все время спрашивать.
Ну видимо ссылку на урок тоже как копипаста воспринимаешь? )))

В любом случае, спасибо. Если не разберусь с поиском, то реализую постарничку
0
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
13.02.2020, 13:26 8
Цитата Сообщение от defond57 Посмотреть сообщение
Ну видимо ссылку на урок тоже как копипаста воспринимаешь? )))

Ссылку на урок чего? Постраничного вывода со стороны сервера? Или клиента?
Если сервера, то смотри мое предыдущее сообщение п.2. Если что-то непонятно или не получается, выкладываешь код - кто-то да поможет.
Если клиента, то смотри п.1 Пока ты сам не начнешь уверенно работать с JS, выкидывать тебе какой-то рабочий код нету смысла, потому что ты его просто скопируешь и следующий твой вопрос будет: памагитя люди добрые, сами мы не местные, я скопировал и ничего не заработало. А все потому, что ты его просто не понимаешь.

Вот кусок кода для поля фильтра по которому идет фильтрация полей таблицы с постраничным выводом.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
ngOnInit() {
    this.filter.valueChanges.pipe(
      startWith(''),
      map(value => typeof value === 'string' ? value : value.name),
      map(name => this._filter(name))
    ).subscribe((d: Observable<any>) => {
      d.subscribe(x => {
        console.log(x);
        this.options = x;
      });
    });
  }
вот ты можешь вот так вот сразу взять и сказать как он работает? Дам подсказку:
1. это ангуляр, в частности тут реактивная форма
2. filter: FormContol;
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
13.02.2020, 13:50  [ТС] 9
Цитата Сообщение от yurickas Посмотреть сообщение
вот ты можешь вот так вот сразу взять и сказать как он работает?
Конечно же нет.

Цитата Сообщение от yurickas Посмотреть сообщение
выкидывать тебе какой-то рабочий код нету смысла
Я не прошу рабочий код. И даже если будет рабочий код, то я буду сидеть и разбираться как именно он работает. На другой странице у меня будет другой запрос, так что все равно придется разбираться.

Цитата Сообщение от yurickas Посмотреть сообщение
Вот кусок кода для поля фильтра по которому идет фильтрация полей таблицы с постраничным выводом
Спасибо, но мне не столько нужен наверное постраничный вывод - этот момент я вроде уже решил, по крайней мере тестирую и пока все работает как надо.

Я решил написать свою функцию поиска данных в таблице, сейчас мне кажется этот вариант будет более востребован пользователю, чем постраничный поиск. Там все равно дофига страниц появляется. Если выводить даже по 10 записей на странице = 758 страниц. Ни кто так искать не захочет.
С коллегами обсудил - проще сделать функцию поиска данных в таблице БД по коду или названию.

Поэтому сейчас курю https://metanit.com/sharp/mvc5/10.3.php и далее по разделу. На сию у меня пока не проходит сам запрос к БД. Пытаюсь понять где накосячил.
0
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
13.02.2020, 14:54 10
Цитата Сообщение от defond57 Посмотреть сообщение
Я решил написать свою функцию поиска данных в таблице, сейчас мне кажется этот вариант будет более востребован пользователю, чем постраничный поиск. Там все равно дофига страниц появляется. Если выводить даже по 10 записей на странице = 758 страниц. Ни кто так искать не захочет.
читаем выше...

Цитата Сообщение от yurickas Посмотреть сообщение
Переделай на постраничный вывод через контроллер. Я думаю так будет лучше и быстрее, не надо будет насиловать БД выгрузкой толстых запросов.
теперь объясняю. Пользователь дальше 2-й страницы не пойдет. На вторую по статистике 5% переходят. Но постраничный вывод чем хорош - размер:

Ты не нагружаешь канал лишними данными. Ты работаешь с MVC. У тебя 7000 записей. Что это значит: контроллер забирает 7000 записей и в разметке делает 7000 итераций по foreach. А теперь, на сайт заходят 100 пользователей, ты представляешь какая это нагрузка на сервер?
Поэтому я сразу и сказал про постраничный вывод через контроллер. Контроллер получает данные, делает выборку, выбирает первую страницу и отдает представление. Все.
Есть поля фильтрации? их можно передать в контроллер. Есть допольнительные параметры для поиска - тоже самое.
Надо вторую страницу - есть кнопки пагинатора. Но это хорошо, если оптимизировать сайт под SEO. При этом все фильтра для сортировки, пагинация и прочая муть легко пишутся в параметрах запроса адресной строки и тогда при нажатии кнопки "Назад" в браузере ты переходишь на предыдущий результат поиска. С моей точки зрения для MVC это самый нормальный вариант.

Далее, если хочешь больше красоты, то надо делать через JS. Но в MVC такая работа - это костыли на велосипедах. Объясняю почему. Контроллер должен отдавать partial view для таблицы, а на странице через ajax ты их будешь загружать. Для этого надо писать отдельный api контроллер (это если по феншую), данные по фильтрации и пагинации хранить в JS. Да, все будет красиво и плавненько показываться, и даже нагрузка на сервер станет меньше, но есть одно маленькое НО. Ты сразу забываешь про SEO. При нажатии кнопки "Назад" ты уходишь назад. А для регионов с хреновым интернетом - это важный аспект. И самый главный минус - эти вот красивые танцы с бубнами с аяксом, jquery и прочими вещами намного быстрее и лучше делаются, используя не MVC, а JS-фреймворки. Причем разработка идет быстрее и на бэкенде и на фронтенде. При этом, нельзя даже сказать, что SEO такого сайта рухнет, а MVC + ajax - это будет 100%
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
13.02.2020, 15:28  [ТС] 11
Цитата Сообщение от yurickas Посмотреть сообщение
Пока ты сам не начнешь уверенно работать с JS
Блин, есть вариант подсказать ссылкой на инструкцию как подключить Аякс к проекту? Описание с Метанит не подходит. С https://professorweb.ru/ тоже. У меня нет в проекте файла WebConfig. При подключении в NuGet пакетов не создается никаких папок Script.
Вот эта строчка:
C#
1
@using (Ajax.BeginForm("BookSearch", new AjaxOptions { UpdateTargetId = "results"}))
Вся в ошибках. У меня, не смотря на подключенные библиотеки, нет Ajax.BeginForm и AjaxOptions. Есть только Html.BeginForm .

Я использую проект MVC с Core 3.0. Может тут какой то другой способ подключения Аякса?

Добавлено через 6 минут
Цитата Сообщение от yurickas Посмотреть сообщение
Ты сразу забываешь про SEO
СЕО как раз беспокоит меньше всего - это узкоспециализированный продукт под мою работу. СЕО не будет от слова совсем.

Аналогично с поиском. Грубо говоря у меня справочник позиций, которые использует специалист. Он должен их ввести. Я хочу облегчить ему работу, чтобы он вводил не вручную из бумажного справочника, а выбирал из электронного. Поэтому искать он будет. Но заставлять его лапатить 750+ страниц - это издевательство над сотрудником.

Цитата Сообщение от yurickas Посмотреть сообщение
Есть поля фильтрации? их можно передать в контроллер. Есть допольнительные параметры для поиска - тоже самое.
Хм... Сделать на кнопку поиск загрузку записей, с использованием фильтра?
Как вариант. Тогда сейчас так и попробую. Спасибо!

Но все же хотелось бы попробовать с Аяксом - поиск через JS запрос
0
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
13.02.2020, 15:46 12
Цитата Сообщение от defond57 Посмотреть сообщение
Я использую проект MVC с Core 3.0.
Забудь про ajax. У тебя в руках пулемет, а ты тянешься за лопатой.
Цитата Сообщение от defond57 Посмотреть сообщение
Хм... Сделать на кнопку поиск загрузку записей, с использованием фильтра?
а никак по другому, иначе заколебешься.

Цитата Сообщение от defond57 Посмотреть сообщение
У меня нет в проекте файла WebConfig. При подключении в NuGet пакетов не создается никаких папок Script.
У core проектов другая структура, там тоже можно все подключить, но немного по другому.

Если не сильно жмет, то доделаю совою работу и может чего накалякаю как шаблон.

Добавлено через 7 минут
по крайней мере на том же метаните вполне нормальное пособие есть по кору https://metanit.com/sharp/aspnet5/
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
13.02.2020, 16:00  [ТС] 13
Цитата Сообщение от yurickas Посмотреть сообщение
по крайней мере на том же метаните вполне нормальное
На метаните библиотека знаний на моё ИМХО самое лучшая. Одна проблема - много всего. ) И основная проблема для меня - core. Структуры очень сильно отличаются.

Цитата Сообщение от yurickas Посмотреть сообщение
Если не сильно жмет, то доделаю совою работу и может чего накалякаю как шаблон.
Не жмет. Но если есть вариант - к примеру есть вариант скинуть и ссылки с метанита по теме. Хочу почитать.

Цитата Сообщение от yurickas Посмотреть сообщение
а никак по другому, иначе заколебешься.
Уже заколебался. Но про Аякс везде пишут, как за самое классное решение. Но мне запросами лучше. Буду ждать пример, а сам попробую зафигачить запрос с фильтрами.

Вот кстати SQL скрипты для создания таблиц в БД. Вдруг пригодятся. Единственное - там внешние ключи не все нужны. Но не нужные и не выполняться, поэтому не стал убирать.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
USE [WebKSP]
GO
 
/****** Object:  Table [dbo].[Teams]    Script Date: 23.11.2019 17:32:14 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[SprKBKBudgetRevenues](
    [Id] UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWSEQUENTIALID(),
    [CODE] [nvarchar] (MAX) NOT NULL,
    [NAME] [nvarchar] (MAX) NOT NULL,
    [SprYearId] [uniqueidentifier] NOT NULL,
    [CREATE] [DATE] NOT NULL,
    [EDIT] [DATE] NOT NULL
    )
GO
 
ALTER TABLE [dbo].[SprKBKBudgetRevenues]
ADD CONSTRAINT FK_SprKBKBudgetRevenues_SprYear FOREIGN KEY ([SprYearId]) REFERENCES [dbo].[SprYear] ([Id])
GO
 
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 00 00000 00 0000 000','НАЛОГОВЫЕ И НЕНАЛОГОВЫЕ ДОХОДЫ','1','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 00000 00 0000 000','НАЛОГИ НА ПРИБЫЛЬ, ДОХОДЫ','2','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01000 00 0000 110','Налог на прибыль организаций','3','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01010 00 0000 110','Налог на прибыль организаций, зачисляемый в бюджеты бюджетной системы Российской Федерации по соответствующим ставкам','4','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01011 01 0000 110','Налог на прибыль организаций (за исключением консолидированных групп налогоплательщиков), зачисляемый в федеральный бюджет','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01012 02 0000 110','Налог на прибыль организаций (за исключением консолидированных групп налогоплательщиков), зачисляемый в бюджеты субъектов Российской Федерации','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01013 01 0000 110','Налог на прибыль организаций консолидированных групп налогоплательщиков, зачисляемый в федеральный бюджет','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01014 02 0000 110','Налог на прибыль организаций консолидированных групп налогоплательщиков, зачисляемый в бюджеты субъектов Российской Федерации','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01015 01 0000 110','Налог на прибыль организаций, уплачиваемый международными холдинговыми компаниями, зачисляемый в федеральный бюджет','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01016 02 0000 110','Налог на прибыль организаций, уплачиваемый международными холдинговыми компаниями, зачисляемый в бюджеты субъектов Российской Федерации','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01020 01 0000 110','Налог на прибыль организаций при выполнении соглашений о разработке месторождений нефти и газа','4','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01021 01 0000 110','Налог на прибыль организаций при выполнении соглашений о разработке месторождений нефти и газа, расположенных в Дальневосточном федеральном округе, на условиях соглашений о разделе продукции, зачисляемый в федеральный бюджет','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
INSERT INTO [dbo].[SprKBKBudgetRevenues] ([CODE],[NAME],[LEVEL],[SprYearId],[CREATE],[EDIT]) VALUES ('1 01 01022 02 0000 110','Налог на прибыль организаций при выполнении соглашений о разработке месторождений нефти и газа, расположенных в Дальневосточном федеральном округе, на условиях соглашений о разделе продукции, зачисляемый в бюджеты субъектов Российской Федерации','5','EBFFA7CB-DC44-EA11-9C2A-04D4C46926FF','01.01.2020','01.01.2020')
GO
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
USE [WebKSP]
GO
 
/****** Object:  Table [dbo].[Teams]    Script Date: 23.11.2019 17:32:14 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[DataBudgetRevenues](
    [Id] UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWSEQUENTIALID(),
    [SprBudjetId] [uniqueidentifier] NOT NULL,
    [SprGeneralAdminId] [uniqueidentifier] NOT NULL,
    [SprKBKBudgetRevenuesId] [uniqueidentifier] NOT NULL,
    [CODE] [nvarchar] (MAX) NOT NULL,
    [NAME] [nvarchar] (MAX) NOT NULL,
    [CREATE] [DATE] NOT NULL,
    [EDIT] [datetime] NOT NULL
    )
GO
 
ALTER TABLE [dbo].[DataBudgetRevenues]
ADD CONSTRAINT FK_DataBudgetRevenues_SprBudjet FOREIGN KEY ([SprBudjetId]) REFERENCES [dbo].[SprBudjet] ([Id])
GO
 
ALTER TABLE [dbo].[DataBudgetRevenues]
ADD CONSTRAINT FK_DataBudgetRevenues_SprGeneralAdmin FOREIGN KEY ([SprGeneralAdminId]) REFERENCES [dbo].[SprGeneralAdmin] ([Id])
GO
 
ALTER TABLE [dbo].[DataBudgetRevenues]
ADD CONSTRAINT FK_DataBudgetRevenues_SprKBKBudgetRevenues FOREIGN KEY ([SprKBKBudgetRevenuesId]) REFERENCES [dbo].[SprKBKBudgetRevenues] ([Id])
GO
0
IamRain
1808 / 1429 / 431
Регистрация: 02.08.2011
Сообщений: 4,182
13.02.2020, 20:09 14
Цитата Сообщение от defond57 Посмотреть сообщение
Ни кто так искать не захочет.
Уф, так вы объедините два действия на сервере - сначала отфильтруйте, потом нарезайте на страницы.
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
14.02.2020, 09:56  [ТС] 15
Цитата Сообщение от IamRain Посмотреть сообщение
потом нарезайте на страницы
Проект постоянно обсуждается с коллегами, изначально думали выводить справочник в виде таблицы со всеми записями с постраничной нарезкой. Я так и сделал. Была одна проблема- очень долгая загрузка страницы. Сюда обратился по вопросу оптимизации.
Пока тут общались - спецы потестировали, постраничный вывод не очень комфортен и все равно затратен по времени. Сейчас пилю вывод основных разделов на одной странице (он маленький) и делаю поиск по коду и названию.

Меня @yurickas убедил, что лучше реализовать поиск, чем насиловать сервер большой выборкой.

Если кто столкнется с похожей проблемой - я остановился на https://dotnet.today/ru/aspnet5-mvc6...pp/search.html В моем случае это более оптимальное решение, т.к. позволяет снизить количество выводимых в запросе строк до вменяемых размеров. Т.к. я ввожу ограничение на количество введенных в поисковую строку символов (через длинну в символах поискового запроса).

Но спс за совет )
0
IamRain
1808 / 1429 / 431
Регистрация: 02.08.2011
Сообщений: 4,182
14.02.2020, 10:27 16
Цитата Сообщение от defond57 Посмотреть сообщение
Пока тут общались - спецы потестировали, постраничный вывод не очень комфортен и все равно затратен по времени.
Значит он у вас криво реализован, так как у всех постраничный вывод - отличное решение для данных любого размера, а для ваших данных размером всего в 7000 он затратен по времени.
0
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
14.02.2020, 11:06  [ТС] 17
Цитата Сообщение от IamRain Посмотреть сообщение
Значит он у вас криво реализован
Затратен не выводом на экран, а временем поиска нужной позиции специалистом. Само собой разумеется, что я сравниваю время на 1) вывод всех 7000 записей и последующий поиск нужной позиции 2) постраничный вывод части позиций и их перебор специалистом 3) вывод ограниченного числа позиций путем выборки по поисковому полю

В моем случае третий вариант оказался самым удобным для спецов и самым быстрым по времени заполнения документа в итоге.

А коряво или красиво - это не для большого круга пользователей, тут важна эффективность и удобство работы. Я облегчаю работу, а не на выставку работу готовлю. Работает без сбоев, обертки и защиты от дурака сделаны, удобно, время и силы экономит. Что еще нужно для счастья?
0
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
14.02.2020, 17:20 18
Цитата Сообщение от defond57 Посмотреть сообщение
вывод ограниченного числа позиций путем выборки по поисковому полю
Обычно всегда постраничный вывод, а в шапке поля для поиска и фильтрации
0
Миниатюры
Оптимизация вывода большого (более 7000) количества записей на странице  
defond57
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 106
15.02.2020, 20:31  [ТС] 19
Цитата Сообщение от yurickas Посмотреть сообщение
Обычно всегда постраничный вывод, а в шапке поля для поиска и фильтрации
Примерно так и сделал. Сверху все поля для поиска и перехода далее. Ниже список отобранных значений (постранично) ниже постранично справочник значений, которые можно ввести в виде спика разделов (по умолчанию). Все получилось вполне компактно и удобно.

Спасибо огромное за помощь. Реализовал без JS, все на MVC. ) Кстати и отклик страниц быстрый и вес страницы небольшой.
0
yurickas
147 / 125 / 30
Регистрация: 25.11.2015
Сообщений: 878
Завершенные тесты: 2
18.02.2020, 15:02 20
https://docs.microsoft.com/ru-ru/asp...vc-application

во, на глаза попалась. Как-раз то что тебе нужно
1
18.02.2020, 15:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2020, 15:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

UPDATE большого количества записей
Добрый день, есть таблица T в которой шесть миллионов записей. В таблице есть внешний ключ на...

Поиск большого количества записей
Товарищи Гуру, прошу помощи...Такой момент есть поиск и выгрузка в excel код привожу procedure...

Ускорение отображения большого количества записей.
Есть Grid подключенный к набору записей (ADODB.Recordset) содержащему большое кол-во записей (около...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.