|
0 / 0 / 0
Регистрация: 25.05.2018
Сообщений: 10
|
|
MySQL Скорость вывода результата select *06.09.2021, 10:46. Показов 3079. Ответов 5
Метки нет (Все метки)
Добрый день.
Есть в таблица на удаленном сервере mysql в около 50 000 записей и С# приложение Проблема 1 Запрос на вывод всей таблицы производится за ~10сек (в воркбенче проверялось) Проблема 2 Уже полученные строки долго выгружаются в LisrView и блокируют гуи 2ая проблема отчасти решена выгрузкой массива айтемов с помощью addrange, а гуи так и блокируется Вопросы: 1. Как узнать и протестировать, почему такая низкая скорость обработки запроса? Есть ли какие-то способы ускорить запрос? Индексы, я так понимаю мне не помогут, т.к. запрос select * from table, но есть один индекс - primary. Использование представления тоже не помогло. 2. Если проблема в слабом железе, можно ли как-то компенсировать это в приложении, чтобы пользователь не бесился? Например, постепенной выгрузкой записей см. 4 пункт 3. VirtualMode у ListView поможет только от лагов в гуи? На скорость выгрузки это никак не влияет? 4. Использовать подкачку строк из бд в listview хорошая идея? Есть ли примеры? 5. Насколько способ использовать локальную бд для текущего сеанса, а бд на сервере просто для хранения, адекватный?
0
|
|
| 06.09.2021, 10:46 | |
|
Ответы с готовыми решениями:
5
Ошибка вывода результата группировки |
|
|
||||||
| 06.09.2021, 11:10 | ||||||
|
dashahaha05,
1. Не знаю как в MySQL, но в MS SQL Server есть генерация планов запроса, в которых видно что и как происходит. По поводу лагов и блокировки UI, используйте для загрузки, да и вообще для работы с БД, методы async/await. Добавлено через 3 минуты dashahaha05, асинхронный пример для MS SQL Server
1
|
||||||
|
|
|
| 06.09.2021, 12:11 | |
|
dashahaha05, тут единственно верный вопрос: Зачем пользователю эти 50 тысяч строк?
Я уже тысячу лет с ВинФормами не работал, но по-моему виртуальный режим и должен за подгрузку строк отвечать, нет? Я помню точно, что у DevExpress и Telerik компонентов это всё реализовано из коробки, но они платные. Наверняка есть бесплатные аналоги. Если нет, пишите сами ручками логику подгрузки/фильтрации/сортировки
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 06.09.2021, 12:23 | |
Сообщение было отмечено dashahaha05 как решение
Решение
dashahaha05,
1. План запроса, как уже было сказано. Но это вряд ли поможет, если у Вас простая выборка из одной таблицы (select * from table), а полей у таблицы 100500 и они в большинстве строковые. Таблетка: пересмотреть смысл такой таблицы - возможно, она просто содержит избыточную информацию, и перепроектировать с оптимизацией (возможно, разбить данные по нескольким таблицам). 2. Зачем пользователь список из 50000 записей ? Как он будет с ним работать ? Таблетка: выборка записей по условиям, которые пользователь может менять как ему нужно (по временным периодам, например) либо сделать пагинацию с вменяемым количеством строк на листе (50-100). 3. Сам по себе VirtualMode никак не "разгонит" скорость выборки и передачи данных от сервера приложению. А вот запуск запроса во вторичном потоке (опять-таки как уже было сказано) избавит приложения от "зависона". И опять же актуален вопрос 2. 4. LazyLoad может помочь, но опять-таки вопрос 2 5. Зависит от логики Вашего приложения. Если в нем предусмотрено внесение изменений в БД, то путь очень сомнительный, т.к. придется писать не примитивную логику для переноса изменений из локальной базы в "общую". Резюме: не следует тащить из базы такое количество данных за раз - их "КПД" будет крайне низок.
0
|
|
|
|
||
| 06.09.2021, 12:27 | ||
|
Все здесь просто уверены что ему НЕ НУЖНЫ 50000 записей одновременно. Но ему наверняка нужно что-то другое. Если он в итоге будет искать нужную запись - то Делаем поиск и догрузку. Если он будет ваш ListView "тыкать", то тоже быстрая догрузка нод поможет.
1
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 06.09.2021, 12:34 | |
|
Есть простой и надежный, а, главное, удобный для пользователя, интерфейс для работы с обширными базами данных.
Это "сопутствующий" основному массиву данных (грид, листвью и т.д.) элемент TreeView, который содержит иерархический список узлов-заголовков. Отображение частей основной информации (как правило, не больших) выполняется по клику на узле заголовке. Например, есть БД каких-то документов за период 10 лет. "Дерево" содержит годы, в них месяцы, в них декады и т.д. Данные отображаются либо по году (долго), либо по месяцу (уже быстрее), либо по декаде (быстро), либо по дате (летает). Плюс есть дополнительная возможность выборки документов по определенным условиям, задаваемым пользователям (фильтры).
0
|
|
| 06.09.2021, 12:34 | |
|
Помогаю со студенческими работами здесь
6
Класс для записи в БД и вывода результата
DataGridView и скорость вывода Передача результата select в другой select Обработка результата select'a Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|