|
|
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть большая база данных MySQL (записей до 10000, но есть большие BLOB-поля, которые нужно изменять, поэтому база занимает на диске больше 3 Гб). Нужно реализовать чтение всех записей таблицы и БЫСТРОЕ изменение BLOB-поля многих записей. ОБЯЗАТЕЛЬНОЕ ТРЕБОВАНИЕ: Никакие компоненты для работы с БД, такие как DataSet не используются (как здесь http://www.delphikingdom.com/asp/articles_forum.asp?ArticleID=1318 ), поэтому метод Edit стандартных компонентов для редактирования текущей записи использовать не получается, то есть можно использовать MySQL.Query(...) и MySQL.ExecSQL(...). === Задачу я решил, но моё решение работает очень медленно: за 12 часов обработалось примерно 10% базы данных. И во время работы программы другие программы не могут нормально работать с этой базой данной, так как всё тормозит (систему нагружает MySQL - его процесс занимает почти всё процессорное время, моя программа занимает до 5%). Прошу предложить оптимизацию моего решения: Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 15:47:14 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Это Delphi? MySQL.Query - Это что такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 15:58:25 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторЭто Delphi? Delphi, но вопрос по правильности SQL-запросов на изменение BLOB-поля текущей записи. var MySQL: IMySQL; Подключаемые файлы брал здесь: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1318 авторMySQL.Query - Это что такое? SQL-запрос к базе данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:11:17 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Имхо, у вас большая часть времени бессмысленно теряется в OFFSET-ах. И, кстати, LIMIT без ORDER BY - рулетка. Рискуете некоторые записи два раза обработать, а некоторые ни разу. Я бы сделал так: Цикл по запросу вида Код: sql 1. до Eof. В цикле запросы: Код: sql 1. Код: sql 1. Обязательно должен быть индекс из полей CODE, NUM. В данном случае порядок полей в индексе не важен. Для других задач может быть важен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:20:43 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumавторЭто Delphi? Delphi, но вопрос по правильности SQL-запросов на изменение BLOB-поля текущей записи. var MySQL: IMySQL; Подключаемые файлы брал здесь: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1318 авторMySQL.Query - Это что такое? SQL-запрос к базе данных тогда я ваще не понимаю. если вопрос имено про склель строку, и метод апдейт назван нахудой конец (исхожу из слов, не знаю как обновить поэтому приходиться так).... то похоже я тоже не умею в базе строчку обновить. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:24:38 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
а вообще, здаёться мне лучше будет так 1)код который выгрузит нам нужные блоб поля в файлы на шдд 2)код на делфи обрабатывает эти файлы, и чтото там меняет сохраняя 3)потом идёт серия апдейтов указывая вкачестве значения поля LOAD FILE fname если действительно хочеться оптимизировать... то надо избежать конвертаций бинарных данных в строку и обратно, как на стороне мускла так и на стороне клиента. под словом файл, имееться ввиду любая ересь, с которой сможет работать мускл по типу SELECT INTO FILE LOAD FROM FILE но скорей всего это будет действительно физический файл на шдд. обход записей в базе для обработки, обычно делаеться либо курсором либо по типу описано выше. ибо не будете же вы ни молиться чтоб никто в базу ничего не вставил /не удалил ни блокировать всю базу на время этой обработки любые селекты что вы изобретаете, не дадут ожидаемый результат если появяться новые записи, или удаляться старые. либо курсор, либо снимок базы но не надеяться на богов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:32:15 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
alex5646574987654531)код который выгрузит нам нужные блоб поля в файлы на шдд 2)код на делфи обрабатывает эти файлы, и чтото там меняет сохраняяЗачем промежуточное сохранение в файл? это же утроение физического ввода-вывода. Раз уж прочитали из MySQL BLOB в память, то в памяти его и обрабатывать. alex564657498765453если действительно хочеться оптимизировать... то надо избежать конвертаций бинарных данных в строку и обратно, как на стороне мускла так и на стороне клиента.Вроде бы BLOB-ы такой конвертацией не страдают... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:35:59 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoft, серьёзно ??? а зачем мы при соединении указываем кодовую страницу??? не потому ли что общение исключительно текстом! база из бинарника делает 100ef67a7c7b мы врядли обрабатывая блоб, обрабатываем его имено в ввиде такой строки. идёт обратное преобразование в цепочку байт цепочку байт обрабатываем, формируем ТЕКС СКЛ ! обратно конвертация, кидаем в базу, там обратная конвертация. про файлы, я не говорю что файлы быстрее, я говорю что ему один чорт надо все сначало выгрузить, обрабатывать, потом загружать назад, а не надеяться на чесное пионерское, что за эти 10 часов никто не поменяет число записей в таблице(вставка, удаление) и раз уж их все всторону смещать, я бы делал имено в файлы. хотя ... он сказал 10000 записей и 3гектара база, значит один блоб гдето 300кб... мдя...файлы плохая затея. ЗЫ а вообще меня смущает постановка вопроса... blob тип это как бы не для того чтоб брать и 10 байт в нём менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:46:57 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
alex564657498765453а зачем мы при соединении указываем кодовую страницу???Для строковых полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:48:43 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoft, так же нужно отметить, что если мы его прочитали в память, и из памяти толкнули в мускл, далеко не тоже самое , что мы один раз прочитали с шдд цепочку байт, и один раз записали. мы же про блоб говорим, тоесть я могу гиг в базу кидануть вкачестве блоба, врядли сеть быстро передаст гиг,и врядли оно будет лежать всё в оперативке, скорей всего в своп повалиться... ЗЫ не зря же много когда используеться имено временный файл - это тогда, когда обьёмы не малые(не 2,4,8,16 байт) - когда есть шанс бросания в своп и обратно, а это куда медленее чем самому красивенько кидать в файл, потом считывать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:52:00 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftalex564657498765453а зачем мы при соединении указываем кодовую страницу???Для строковых полей. :) ней, для текста общения... просто латиница, на которой язык скл во всех кодовых страницах одинакова, и поэтому всегда читаеться, а не читаються только текстовые поля. пойми мне правильно, сказать что мы указываем кодировку только для текстовых полей, тоже самое что мы указываем в штмл кодировку только для - содержания тегов, значений текстовых переменых. согласен фиг доколупаешься, ибо действительно только они будут не верно интерпретированы. но всётаки щитаю что кодировка указываеться для протокола, который основан на передаче текста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:55:58 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
alex564657498765453скорей всего в своп повалиться...откуда эти фантазии про своп, если там средний размер блоба 300Кбайт ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 17:04:07 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
оптимизировать можно исключив limit и выбирать по одной записи, лимит может вносить существенное торможение даже при увеличении обращений к серверу это сэкономит время чтои советует miksoft ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 17:13:40 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторЯ бы сделал так: Цикл по запросу вида SELECT CODE, NUM FROM MyTable ORDER BY CODE, NUM до Eof. Действительно SELECT "CODE, NUM" выдаст записи без поля BLOB. Возможно оперативной памяти хватит. Надо попробовать. Но если ключевые поля не эти, то сработает ли "ORDER BY CODE, NUM"? авторВ цикле запросы: SELECT IMAGE FROM MyTable WHERE CODE=... AND NUM=... UPDATE MyTable SET MyTable.IMAGE=... WHERE CODE=... AND NUM=... Не понимаю зачем первая строка, ведь вторая строка не использует результат первой? Или это один запрос? авторОбязательно должен быть индекс из полей CODE, NUM. В данном случае порядок полей в индексе не важен. Для других задач может быть важен. Базу данных не я проектировал. Какие в ней ключи не знаю. Структуру базы данных изменять нельзя. авторИмхо, у вас большая часть времени бессмысленно теряется в OFFSET-ах. Без них никак. Если использовать "SELECT *" без "LIMIT 10", то программе не хватает памяти и она завершается с ошибкой авторИ, кстати, LIMIT без ORDER BY - рулетка. Возможно важное замечание. Но разве записи выдаются не в порядке добавления в таблицу? авторРискуете некоторые записи два раза обработать, а некоторые ни разу. Это не проблема. Я могу программу 10 раз запустить. Тем более, что после изменения записи, записи повторно быстро обрабатываются. (После обработке обычно их размер уменьшается в разы) автора вообще, здаёться мне лучше будет так 1)код который выгрузит нам нужные блоб поля в файлы на шдд 2)код на делфи обрабатывает эти файлы, и чтото там меняет сохраняя Через файлы ещё медленнее. автор3)потом идёт серия апдейтов указывая вкачестве значения поля LOAD FILE fname Приведите пример SQL запроса с загрузкой файла в BLOB-поле. Подозреваю, что возможны ошибки SQL или зависания, так как моя программа отправит 1000 запросов на изменение BLOB-полей из 1000 файлов по 1 Мб, и что в каком порядке и когда изменится не известно. авторесли действительно хочеться оптимизировать... то надо избежать конвертаций бинарных данных в строку и обратно, как на стороне мускла так и на стороне клиента. Это работает быстро. Систему нагружает MySQL - его процесс занимает почти всё процессорное время, моя программа занимает до 5% авторобход записей в базе для обработки, обычно делаеться либо курсором либо по типу описано выше. Как это? авторибо не будете же вы ни молиться чтоб никто в базу ничего не вставил /не удалил ни блокировать всю базу на время этой обработки Я программу на ночь запустить могу, когда никто с базой данных не работает. Проблема в том, что сейчас программа не может успеть за ночь. авторлюбые селекты что вы изобретаете, не дадут ожидаемый результат если появяться новые записи, или удаляться старые. либо курсор, либо снимок базы В моём случае этого можно избежать. авторпро файлы, я не говорю что файлы быстрее, я говорю что ему один чорт надо все сначало выгрузить, обрабатывать, потом загружать назад, а не надеяться на чесное пионерское, что за эти 10 часов никто не поменяет число записей в таблице(вставка, удаление) Мне надо быстрее. Можно организовать, что за эти 10 часов никто не поменяет число записей. автора вообще меня смущает постановка вопроса... blob тип это как бы не для того чтоб брать и 10 байт в нём менять. Меняется не 10 байт, а абсолютно все байты и длина всего BLOB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 17:23:28 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторВ цикле запросы: SELECT IMAGE FROM MyTable WHERE CODE=... AND NUM=... UPDATE MyTable SET MyTable.IMAGE=... WHERE CODE=... AND NUM=... Не понимаю зачем первая строка, ведь вторая строка не использует результат первой? Или это один запрос? гыыыы первая выбирает данное второе записывает изменённое данное CODE=... AND NUM=... - фильтрация данных для выбора и для записи limit забирает всё время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 17:40:28 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторавтор Я бы сделал так: Цикл по запросу вида SELECT CODE, NUM FROM MyTable ORDER BY CODE, NUM до Eof. Действительно SELECT "CODE, NUM" выдаст записи без поля BLOB. Но мне нужно поле BLOB , чтобы на основании его рассчитать новое значение. А если одним SELECT получить CODE и NUM, а вторым получать по ним IMAGE, то не потеряется ли результат первого SELECT (если всё-таки использовать OFFSET), даже если я для результатов первого и второго SELECT заведу разные переменные? автороптимизировать можно исключив limit и выбирать по одной записи, лимит может вносить существенное торможение даже при увеличении обращений к серверу это сэкономит время Как без "LIMIT 1" с помощью "SELECT" получить 1 запись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 17:50:21 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
И есть ли в SQL команда на изменение i-ой записи в таблице без "WHERE"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 17:53:05 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
И в какой момент данные передаются в программу: автор query_result := MySQL.Query('SELECT * FROM MyTable LIMIT 10 OFFSET ' + IntToStr(offset1)); или авторquery_result.FetchRow ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:00:23 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforum, хм...если тебя устроит перенести логику на мускл, так напиши хранимку которая сделает нужные замены с блобами... всётаки раскажи, что за замены ты с блобом делаешь, что надо их хранить в базе а не в файлах на шдд, и что нужны такие замены.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:04:12 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Базу данных не я проектировал. Структуру базы данных изменять нельзя и другие изменения мне вносить нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:10:23 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumНо если ключевые поля не эти, то сработает ли "ORDER BY CODE, NUM"?Сработает, почему нет? Хотя если индекс есть, то сработает значительно быстрее. useronforumСтруктуру базы данных изменять нельзя.Индекс - это не структура. Проверьте, возможно, индекс уже есть. Без него даже ваш изначальный апдейт будет работать неразумно долго. useronforumавторИмхо, у вас большая часть времени бессмысленно теряется в OFFSET-ах. Без них никак. Если использовать "SELECT *" без "LIMIT 10", то программе не хватает памяти и она завершается с ошибкойНе знаю как у используемого компонента, а у нормальных Query можно ограничить размер потребляемой памяти буфером хоть на одну запись. Так что лимит сам по себе не нужен. И, кстати, не пользуйтесь звездочкой в боевых запросах. Лишние поля таскать ни чему. useronforumавторВ цикле запросы: SELECT IMAGE FROM MyTable WHERE CODE=... AND NUM=... UPDATE MyTable SET MyTable.IMAGE=... WHERE CODE=... AND NUM=... Не понимаю зачем первая строка, ведь вторая строка не использует результат первой? Или это один запрос?Нет, это два запроса. Первый читает блоб, потом ваша обработка, второй сохраняет блоб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:14:18 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторДействительно SELECT "CODE, NUM" выдаст записи без поля BLOB. расшифруй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:15:46 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Про ключи узнал: PRIMARY KEY (`CODE`,`NUM`,`DATE1`). авторНе знаю как у используемого компонента, а у нормальных Query можно ограничить размер потребляемой памяти буфером хоть на одну запись. Так что лимит сам по себе не нужен. Программа начинала занимать 900Мб и т.д. пока "Out of memory" не появилось. авторавторавтор Действительно SELECT "CODE, NUM" выдаст записи без поля BLOB. расшифруй IMAGE - BLOB-поле, которое занимает много байт. Если его в SELECT не ставить, то меньше информации передаётся SELECT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:26:44 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumПро ключи узнал: PRIMARY KEY (`CODE`,`NUM`,`DATE1`).О, это хорошо. Отдельный индекс создавать не надо. useronforumавторНе знаю как у используемого компонента, а у нормальных Query можно ограничить размер потребляемой памяти буфером хоть на одну запись. Так что лимит сам по себе не нужен. Программа начинала занимать 900Мб и т.д. пока "Out of memory" не появилось.Смотрите свойства компонента. Например, Unidirectional. Да и без этого, 10000 полей `CODE` и `NUM` займут копейки по сравнению с 900Мб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:30:01 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторIMAGE - BLOB-поле, которое занимает много байт. Если его в SELECT не ставить, то меньше информации передаётся SELECT. а если ничего не ставить - ваще места буде дофига тебе ж разжевали Нет, это два запроса. Первый читает блоб, потом ваша обработка, второй сохраняет блоб. а если и при этом у тебя будет переполнение памяти - зачит при обработке блоба ты не правильно работаешь с памятью видимо в цикле создаются новые переменные, а не используются прежние ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:53:45 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
так сделал 15897029 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:58:14 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Ошибки при работе появились. Возможно нужно разные объекты MySQL для MySQL.Query создавать для запроса авторЦикл по запросу вида SELECT CODE, NUM FROM MyTable ORDER BY CODE, NUM до Eof. и авторВ цикле запросы: SELECT IMAGE FROM MyTable WHERE CODE=... AND NUM=... UPDATE MyTable SET MyTable.IMAGE=... WHERE CODE=... AND NUM=... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:59:39 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumВозможно нужно разные объекты MySQL для MySQL.Query создавать для запросаДа, конечно, это два разных Query, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:02:30 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoft, Только результаты Query разные переменные, или и объекты для подключения к БД разные и для каждого нужно отдельно указывать IP, Port, User, Password и делать Connect? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:15:25 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforummiksoft, Только результаты Query разные переменные, или и объекты для подключения к БД разные и для каждого нужно отдельно указывать IP, Port, User, Password и делать Connect?Сессия одна, Query разные. Можно даже три Query сделать, чтобы во втором запрос постоянно не переписывать. Кстати, если движок таблиц InnoDB и автокоммит выключен, то коммит делать не забывайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:20:38 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
У меня не находит IMAGE по ID и CODE. Может нужны кавычки где-нибудь или индекс не правильно указал? Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:22:44 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoft, авторКстати, если движок таблиц InnoDB и автокоммит выключен, то коммит делать не забывайте. Что такое автокоммит и как делать коммит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:24:56 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Заработал поиск IMAGE без сортировки. Теперь тормозит всё даже на моей маленькой базе с 20 записями. А я столько кода уже переписал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:37:18 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumУ меня не находит IMAGE по ID и CODE. Может нужны кавычки где-нибудь или индекс не правильно указал? Код: pascal 1. 2. 3. 4. 5. Уберите секцию ORDER BY, она тут не нужна. Во-первых, по синтаксису она ставится после WHERE. Во-вторых, здесь все равно не может быть выбрано более одной записи, так что сортировать просто нечего. И научитесь ловить исключения или проверять возвращаемые ошибки, чтобы не пропустить сигнал от MySQL о неправильном синтаксисе запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:37:39 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforummiksoft, авторКстати, если движок таблиц InnoDB и автокоммит выключен, то коммит делать не забывайте. Что такое автокоммит и как делать коммит?Похоже, что пока это неважно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:38:31 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumЗаработал поиск IMAGE без сортировки. Теперь тормозит всё даже на моей маленькой базе с 20 записями.Итоговый код покажите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:38:46 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoft, а индекс правильно указан: Код: pascal 1. C пробелами, запятыми и без общих кавычек? Порядок полей важен? Может индекс можно только по имени указывать, а не перечислением полей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:44:31 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforummiksoft, а индекс правильно указан: Код: pascal 1. C пробелами, запятыми и без общих кавычек? Порядок полей важен? Может индекс можно только по имени указывать, а не перечислением полей?ORDER BY - это не индекс, это указание как сортировать результат запроса. Оно может выполняться и при наличии индекса, и без него. Порядок полей был бы важен, если бы сам этот ORDER BY был важен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:47:35 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторORDER BY - это не индекс, это указание как сортировать результат запроса. Оно может выполняться и при наличии индекса, и без него. Порядок полей был бы важен, если бы сам этот ORDER BY был важен. В первом запросе порядок важен Код: c# 1. 2. Индекс автоматически задействуется, если ORDER BY указан по полям как в индексе, или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:51:19 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
А не должны ли обязательно быть в SELECT перечислены все те поля, которые есть в ORDER BY? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:55:58 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumавторORDER BY - это не индекс, это указание как сортировать результат запроса. Оно может выполняться и при наличии индекса, и без него. Порядок полей был бы важен, если бы сам этот ORDER BY был важен. В первом запросе порядок важен Код: c# 1. 2. Индекс автоматически задействуется, если ORDER BY указан по полям как в индексе, или нет?Да, в таком запросе порядок важен. В первую очередь он зависит от задачи, чтобы был правильный результат. Во вторую очередь желательно, чтобы порядок полей совпадал с порядком полей в начале индекса. Тогда этот индекс может быть использован для сортировки. Поле DATE1 из ORDER BY уберите, все равно оно не идет в результат. Да и на сортировку не влияет. А вот зачем тут LIMIT - не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:57:45 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumА не должны ли обязательно быть в SELECT перечислены все те поля, которые есть в ORDER BY?Нет, вообще эти списки полей могут даже не пересекаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:58:30 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторПоле DATE1 из ORDER BY уберите, все равно оно не идет в результат. Да и на сортировку не влияет. А вот зачем тут LIMIT - не понятно. Поле DATE1 в ORDER BY есть, так как оно есть в индексе. LIMIT на всякий случай ставлю из Edit. Если будет переполнение памяти, то поставлю 1 и проверю сразу же. авторавторА не должны ли обязательно быть в SELECT перечислены все те поля, которые есть в ORDER BY? Нет, вообще эти списки полей могут даже не пересекаться. Но почему то не работал: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 20:05:12 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 20:06:45 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoft, Забыл. === А LIMIT 1 не ускорит запрос, если запись всегда 1? Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 20:14:39 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumА LIMIT 1 не ускорит запрос, если запись всегда 1?нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 20:17:18 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Ладно, на сегодня всё. Моя программа по крайней мере у меня стала грузить процессор намного сильнее. Завтра проверю на реальной базе. Если что интересное получится - напишу. Всем спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 20:22:20 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumМоя программа по крайней мере у меня стала грузить процессор намного сильнее.Так это же хорошо. Она делом занялась, а не простаивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 20:23:05 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoft , крепкие нервы.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 20:32:57 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
вадяmiksoft , крепкие нервы....+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 05:08:56 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
В общем после оптимизации всё стало намного медленнее работать. 1 запись изменяется по 2 минуты. И за месяц так не обработается. Я везде комментарии с сообщениями поставил. Тормозит запрос Код: pascal 1. 2. 3. 4. 5. 6. Думаю сортировка по индексу не применяется, и тратятся ресурсы на поддержку сортировки по 3 полям, хотя ЭТОТ ЗАПРОС ВСЕГДА ВОЗВРАЩАЕТ 1 ЗАПИСЬ (200 Кб - 3 Мб). Наверно лучше без сортировки. А есть ли метод "FIND FIRST" в языке SQL чтобы использовать вместо SELECT многих записей? И какой наиболее быстрый способ загрузки BLOB-поля из файла, с учётом, что я могу программу локально на сервере запустить? === Подозреваю, что есть какое-то ограничение на скорость передачи данных, ведь все данные передаются по сетевому протоколу хоть и внутри 1 компьютера, а интернет у нас не быстрый). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 12:50:46 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumТормозит запрос Код: pascal 1. 2. 3. 4. 5. 6. Знаете... мои нервы хоть и были отмечены выше, но они тоже заканчиваются. Зачем здесь вообще сортировка? Уберите сортировку, соберите запрос в строковую переменную, выведите ее на экран или еще куда-нибудь. Затем подключитесь к MySQL консольным или GUI-клиентом или PHPMyAdmin-ом и посмотрите план этого запроса. После этого показывайте нам запрос и его план. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 13:16:31 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Сортировку убрал, скорость почти не изменилась. Но когда добавил "LIMIT 1" скорость заметно возросла (но сильно уменьшается при приближении к концу таблицы) авторЗатем подключитесь к MySQL консольным или GUI-клиентом или PHPMyAdmin-ом и посмотрите план этого запроса. После этого показывайте нам запрос и его план. Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 14:32:16 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumНо когда добавил "LIMIT 1" скорость заметно возрослаЛибо вы что-то путаете, либо изначальная установка "каждая запись уникальна по паре значений CODE и NUM" неверна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 14:50:50 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumЭто как?Посмотреть план запроса можно, например, добавив перед ним слово EXPLAIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 14:51:37 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
и покажи код по аналогии с 1 постом в чем тормоза? в обработке дельфи или mysql сервера? можешь / умеешь пользоваться пошаговой отладкой? поставь таймеры - определи какой кусок кода работает дольше авторНо когда добавил "LIMIT 1" скорость заметно возросла ты что-то скрываешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 15:05:14 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. EXPLAIN Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Смущает rows. В таблице меньше записей кажется. авторавторНо когда добавил "LIMIT 1" скорость заметно возросла Либо вы что-то путаете, либо изначальная установка "каждая запись уникальна по паре значений CODE и NUM" неверна. Уникальна практически, но как уникальная возможно не установлена (как ключ). авторможешь / умеешь пользоваться пошаговой отладкой? поставь таймеры - определи какой кусок кода работает дольше Использую. С их помощью определил, что именно этот запрос тормозит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 15:38:39 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
так проверь Код: sql 1. 2. и соответсвенно поправиь везде и код приведи с делфи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 16:17:14 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
вадя, Не правильно. Есть записи с одинаковым CODE, но разным NUM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 16:24:53 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumEXPLAIN Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Смущает rows. В таблице меньше записей кажется.useronforumПро ключи узнал: PRIMARY KEY (`CODE`,`NUM`,`DATE1`).Не верю. Либо ключа нет, либо он не такой, либо запрос не такой. Покажите итоговый запрос, а не выражение, его вычисляющее. P.S. Количество записей примерное, это оценка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 16:45:26 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
выложи DDL таблицы MyTable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 16:45:50 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторавторПро ключи узнал: PRIMARY KEY (`CODE`,`NUM`,`DATE1`). Не верю. Либо ключа нет, либо он не такой, либо запрос не такой. Покажите итоговый запрос, а не выражение, его вычисляющее. Посмотрел сторонней программой. Пишет: Indexes: CODE Fields: CODE Index method: BTREE Foreign keys: Name: photo Fields: CODE Ранее смотрел другой программой, там по другому кажется написано было, но я тогда мог перепутать индекс с текущей сортировкой. Попробую сортировку по CODE. === Обнаружил триггер на таблице: В OnUpdate таблицы: BEGIN UPDATE `list` SET `posted` = 0 WHERE CODE = NEW.`CODE`; END Казалось бы проблема найдена, НО тормозит чтение BLOB-поля, а не запись нового значения его. Или теоретически возможно, что я отправляю update, а когда следом читаю SELECT, то MySQL ещё выполняет этот триггер, и поэтому тормозит загрузка данных? === А возможно ли временно отключить триггер, а потом включить не удаляя? Если да, то как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 17:15:58 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforum, покажите результат запроса CREATE TABLE MyTable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 17:18:11 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Я такой запрос выполнить не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 17:29:08 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
А можно ли создать триггеры через SQL-запрос? А то я их отключил, а они удалились при этом. (копию их кода я из резервной копии потом попробую восстановить.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 17:44:55 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumЯ такой запрос выполнить не могу.Что мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 17:54:02 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumА можно ли создать триггеры через SQL-запрос? А то я их отключил, а они удалились при этом. (копию их кода я из резервной копии потом попробую восстановить.)Отключения триггеров в MySQL нет, только удаление и создание. Триггера только через SQL-запрос и можно создать, иначе никак. Но это явно не причина медленного чтения из таблицы. Причина - отсутствие подходящего индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 17:55:36 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
А может индекс временно создать, обработать все BLOB и индекс удалить? === Долго ли будет создаваться индекс для БД 3 Гб и как узнать, что он создался и все записи проиндексированы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 18:13:51 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumА может индекс временно создать, обработать все BLOB и индекс удалить?Можно и так, если обработка нужна один раз, а не регулярно. useronforumДолго ли будет создаваться индекс для БД 3 Гбдостаточно быстро, сам индекс-то получится маленький. useronforumкак узнать, что он создался и все записи проиндексированы?Выдаст в конце "ОК", значит все записи проиндексированы. В противном случае выдаст ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 18:21:43 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
А какие запросы к БД создают триггер и индекс? Напишите примеры запроса для MySQL, чтобы мне долго не искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 18:38:44 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
miksoftuseronforumЯ такой запрос выполнить не могу.Что мешает? ????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 18:42:24 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumА какие запросы к БД создают триггер и индекс? Напишите примеры запроса для MySQL, чтобы мне долго не искать.А вы ищите быстро :) У MySQL вполне приличная документация и она неплохо структурирована. CREATE TRIGGER Trigger Syntax and Examples ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 18:48:45 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
скачай db forge и не майся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 18:57:25 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
В общем одной программой удалил триггеры, а создать заново она их не может. Пришлось другой создавать (HeidiSQL). К счастью создались. === Про индексы: Программа пишет: Код: pascal 1. 2. 3. А как в SQL запросе сказать, что нужно использовать индекс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 20:23:52 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
В общем запрос теперь такой: Код: pascal 1. 2. 3. 4. 5. 6. Создал дополнительный индекс CODE_NUM по полям CODE, NUM, но это судя по всему не повлияло. Но при использовании ORDER BY CODE, NUM EXPLAIN стало возвращать: Код: pascal 1. 2. 3. 4. 5. 6. 7. Завтра опять буду пробовать на настоящей базе данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 21:11:20 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumВ общем запрос теперь такой:miksoftПокажите итоговый запрос, а не выражение, его вычисляющее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 21:13:18 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforum, покажите результат запроса Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 22:13:52 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
это лишнее ' ORDER BY CODE, NUM LIMIT 1' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 22:14:51 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторmiksoft Покажите итоговый запрос, а не выражение, его вычисляющее. Итоговый запрос: Код: pascal 1. 2. 3. В структуре таблицы: 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% всех записей, так как дальше я не стал ждать, а оставил программу запущенной и ушёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2014, 15:07:44 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforum Код: pascal 1. И это работает? не верю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2014, 15:09:21 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
2useronforum кончай хернёй заниматься выполни Код: sql 1. и результат покажи Код: sql 1. гыгыгыг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2014, 16:00:05 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Проблема решилась В общем проблема была в том, что индекс используется только если выполняется поиск СРАЗУ ПО ВСЕМ ПОЛЯМ, ВХОДЯЩИМ В ИНДЕКС. То есть даже несмотря на то, что такие запросы Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. всегда ищут и изменяют только 1 запись с точки зрения логики программы, но так как в главный индекс входят 3 поля Код: pascal 1. то нужно выполнять поиск и изменение по всем 3 полям (иначе индекс не задействуется). То есть правильный вариант: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. После этого вся база данных обработалась за 2 часа (а не за 7 дней). Всем спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 12:37:40 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumиндекс используется только если выполняется поиск СРАЗУ ПО ВСЕМ ПОЛЯМ, ВХОДЯЩИМ В ИНДЕКС.Не должно быть такого... Можете указать точную версию MySQL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 12:41:31 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
авторавториндекс используется только если выполняется поиск СРАЗУ ПО ВСЕМ ПОЛЯМ, ВХОДЯЩИМ В ИНДЕКС. Не должно быть такого... Можете указать точную версию MySQL ? MySQL 5.0.51 И LIMIT 1 вы говорили, что не должно увеличить быстродействие, если возвращается только 1 запись, а оно сильно увеличивалось для записей находящихся в начале таблицы, так как индекс не задействовался и без LIMIT 1 поиск продолжался после нахождения записи (сейчас с индексом не влияет). Так что теория иногда с практикой расходятся. (Но думаю это заметно только при наличии больших BLOB-полей) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 16:25:52 |
|
||
|
Быстрое попеременное чтение и изменение BLOB-записей таблицы в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
useronforumвы говорилия-то говорил... но вот имплементировали вы мое говорение, мягко говоря, очень приблизительно. Поэтому при случае попробую поставить эксперимент для сходных условий. P.S. И, кстати, MySQL неплохо бы обновить. 6 лет уж ему... и ветка 5.0 давно не поддерживается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 16:32:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1834940]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
91ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 362ms |

| 0 / 0 |
