powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
7 сообщений из 7, страница 1 из 1
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
    #39294583
Гость2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята подскажите если я извлекаю подстроку из большой строки(MEDIUMTEXT) Mysql грузит всю строку в память, а потом обрезает или он это делает прямо на диске?

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

Спасибо.
...
Рейтинг: 0 / 0
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
    #39294593
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер на диске НИЧЕГО делать не может. Этим занимается дисковая подсистема операционки.

Да, ВСЯ строка грузится в память (вернее, все страницы, которые необходимы для сборки этой строки).
Гость2016текст очень большой и таких операций будет очень много, оперативка будет перегруженаДобавь оперативки.
...
Рейтинг: 0 / 0
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
    #39294775
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

вот сдесь мне думается ты ошибаешся...

из документации

Each BLOB or TEXT value is represented internally by a separately allocated object. This is in contrast to all other data types, for which storage is allocated once per column when the table is opened.

тоесть не нужно считать, что если мы гдето упомянули поле типа блоб, всё - оно тутже грузится. оно не грузится, туда помещается обьект, который может выдать любую часть блоба

---
если select * from table.
да, передать значение надо целиком, грузить надо целиком. Но - сдесь невозникнет проблемы даже если блоб на 50Гб, а обьём максимального пакета всего 1Кб. мускл сам разрулит проблему, и никакие 50Гб даже, 10Мб одновременно в памяти не окажутся (разве что в буферах если есть возможность)

если
select ... from ... where instr(....using blob...) - вот на этой проверке будет тормоза, но не изза памяти, а изза того что хоть что делай , кроме как перечитать с винчестера все 50Гб для проверки наличия подстроки нету.

если в веар несколько проверок, которые могут потребовать пересмотра всех 50Гб, а на сервере оперативки 128Гб, не стоит ожидать что вторая и дальше проверки пройдут быстро...ибо этот обьект, котоырй представляет блоб, не имеет ни чего общего с общей логикой кеша и буферов ИнноДБ и мускла, 99.9% что во время первой проверки, более гига в памяти одновременно не окажется, ибо проверка куда более быстрый процесс чем чтение шдд, поэтому по мере продвижения по блобу, уже считаные и провереные на подстроку блоки будут удалятся из памяти.

именно потому что блоб изначально задуман как очень большой(логически ничем не ограничен) обьём данных, работа с ним отличается от обычных полей. в таблицах типа мемори такого поля быть не может, подобное значение априори не представимо в памяти, оно всегда является файлом(логически) - мы можем бегать по нему, считывать кусок, записывать кусок.

----------
переживать надо за другое, храня подобные данные. ... если автор хорошо тестирует приложение, тогда может не переживать - клювом стукнется во все нюансы связанные с этим
::
загрузка данных ограничена мак_пакет_сайз, если вставка защёт функции фром_файл, мускл сам рулит, если командой инсерт то либо по принципу
...
Рейтинг: 0 / 0
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
    #39294777
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин...пропала часть писанины, обламало писать заново...
...
Рейтинг: 0 / 0
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
    #39294789
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость2016 извлекаю подстроку из большой строкиЕсли это понимать буквально:
Код: sql
1.
SELECT substr(blob_field,1,1) FROM mytable

То, думаю, содержимое поля все равно будет прочитано целиком, несмотря на то, что фактически нужен только маленький начальный кусочек.



С BLOB-ами вообще все не так просто, например: http://dev.mysql.com/doc/refman/5.5/en/blob.html Instances of BLOB or TEXT columns in the result of a query that is processed using a temporary table causes the server to use a table on disk rather than in memory because the MEMORY storage engine does not support those data types (see Section 8.4.4, “Internal Temporary Table Use in MySQL”). Use of disk incurs a performance penalty, so include BLOB or TEXT columns in the query result only if they are really needed. For example, avoid using SELECT *, which selects all columns.
...
Рейтинг: 0 / 0
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
    #39294932
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453 , ты говоришь не о том, о чём я. А о чём говорит ТС, я пока не понял, но явно о чём-то третьем...
...
Рейтинг: 0 / 0
При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
    #39295597
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу поигратся... блин, это не тривиальная задача загрузить в блоб большой обьём.

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

ОШИБКА если
1) обьём больше 10% от размера иннодб_лог_файла
2) почему то выдало ошибку при обьеме больше max_packet_size хотя я вроде как читал, что этот метод для загрузки больших данных иммено и нужен дабы обойти размер пакета.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / При извлечении подстроки из текста Mysql грузит всю строку в память или только вырезанную?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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