powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
10 сообщений из 85, страница 4 из 4
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38619258
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
useronforumВ общем запрос теперь такой:miksoftПокажите итоговый запрос, а не выражение, его вычисляющее.
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38619285
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
useronforum,

покажите результат запроса
Код: sql
1.
SHOW CREATE TABLE MyTable 
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38619286
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это лишнее
' ORDER BY CODE, NUM LIMIT 1'
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38619502
useronforum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторmiksoft
Покажите итоговый запрос, а не выражение, его вычисляющее.
Итоговый запрос:
Код: pascal
1.
2.
3.
 
SELECT IMAGE FROM MyTable WHERE CODE = 000000021 and NUM = 2
ORDER BY CODE, NUM, DATE1 ORDER BY CODE, NUM LIMIT 1


В структуре таблицы:
CODE - CHAR (9)
NUM - CHAR (22)
DATE1 - datetime
IMAGE - mediumblob

авторЗавтра опять буду пробовать на настоящей базе данных.
Скорость работы:
В общем работать с ORDER BY CODE, NUM LIMIT 1 стало намного быстрее: 1 запись в секунду.

Но работа сильно замедляется при продвижении по таблице.

После 10% всех записей 1 запись обрабатывается уже 20-60 сек.

Причём, если в начале основное время тратится на получение BLOB (SELECT IMAGE),
а отправка нового значения выполняется очень быстро,
то после 10%, и получение BLOB и отправка нового BLOB,
выполняются уже почти одинаково медленно по 20-30 сек.

Все ресурсы занимает сервер MySQL,
моя программа 0-2% CPU.

===
Говорю 10% всех записей, так как дальше я не стал ждать,
а оставил программу запущенной и ушёл.
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38619504
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
useronforum
Код: pascal
1.
ORDER BY CODE, NUM, DATE1 ORDER BY CODE, NUM

И это работает? не верю.
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38619522
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2useronforum
кончай хернёй заниматься
выполни
Код: sql
1.
SHOW CREATE TABLE MyTable 


и результат покажи

Код: sql
1.
ORDER BY CODE, NUM, DATE1 ORDER BY CODE, NUM LIMIT 1


гыгыгыг
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38620282
useronforum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решилась

В общем проблема была в том, что индекс используется
только если выполняется поиск СРАЗУ ПО ВСЕМ ПОЛЯМ, ВХОДЯЩИМ В ИНДЕКС.

То есть даже несмотря на то, что такие запросы
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
 query_result_image := MySQL.Query(
        'SELECT `IMAGE` FROM `MyTable`' +
        ' WHERE `CODE`=''' + query_result.ValueByName['CODE'] + '''' +
        ' AND `NUM`=''' + query_result.ValueByName['NUM'] + ''''
        );

MySQL.ExecSQL('UPDATE MyTable SET MyTable.IMAGE="' + NewBLOB +
        '" WHERE CODE = ' + query_result.ValueByName['CODE'] +
        ' AND NUM = ' + query_result.ValueByName['NUM']);


всегда ищут и изменяют только 1 запись с точки зрения логики программы,
но так как в главный индекс входят 3 поля
Код: pascal
1.
PRIMARY KEY (`CODE`,`NUM`,`DATE1`).


то нужно выполнять поиск и изменение по всем 3 полям
(иначе индекс не задействуется).

То есть правильный вариант:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
query_result_image := MySQL.Query(
        'SELECT `IMAGE` FROM `MyTable`' +
        ' WHERE `CODE`=''' + query_result.ValueByName['CODE'] + '''' +
        ' AND `NUM`=''' + query_result.ValueByName['NUM'] + '''' +
        ' AND `DATE1`=''' + query_result.ValueByName['DATE1'] + ''''
        );

MySQL.ExecSQL('UPDATE `MyTable` SET `MyTable`.`IMAGE`="' + NewBLOB  +
        '" WHERE `CODE`=''' + query_result.ValueByName['CODE'] + '''' +
        ' AND `NUM`=''' + query_result.ValueByName['NUM'] + '''' +
        ' AND `DATE1`=''' + query_result.ValueByName['DATE1'] + ''''
        );



После этого вся база данных обработалась за 2 часа (а не за 7 дней).

Всем спасибо за помощь.
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38620290
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
useronforumиндекс используется
только если выполняется поиск СРАЗУ ПО ВСЕМ ПОЛЯМ, ВХОДЯЩИМ В ИНДЕКС.Не должно быть такого...
Можете указать точную версию MySQL ?
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38621831
useronforum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторавториндекс используется
только если выполняется поиск СРАЗУ ПО ВСЕМ ПОЛЯМ, ВХОДЯЩИМ В ИНДЕКС.
Не должно быть такого...
Можете указать точную версию MySQL ?
MySQL 5.0.51

И LIMIT 1 вы говорили, что не должно увеличить быстродействие,
если возвращается только 1 запись,
а оно сильно увеличивалось для записей находящихся в начале таблицы,
так как индекс не задействовался и без LIMIT 1 поиск продолжался
после нахождения записи (сейчас с индексом не влияет).

Так что теория иногда с практикой расходятся.
(Но думаю это заметно только при наличии больших BLOB-полей)
...
Рейтинг: 0 / 0
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
    #38621844
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
useronforumвы говорилия-то говорил... но вот имплементировали вы мое говорение, мягко говоря, очень приблизительно.
Поэтому при случае попробую поставить эксперимент для сходных условий.

P.S. И, кстати, MySQL неплохо бы обновить. 6 лет уж ему... и ветка 5.0 давно не поддерживается...
...
Рейтинг: 0 / 0
10 сообщений из 85, страница 4 из 4
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]