MySQL SELECT очень медленный, потому что LONGBLOB - PullRequest
6 голосов
/ 16 января 2012

почему или как решить проблему на MySQL.

table xxx
-> id primary key
-> name varchar 255
-> data longblob

когда я храню в этой таблице 100 файлов, каждый по 100 МБ, таблица будет иметь 10 ГБ

и затем попытайтесь выбрать любую строку ... это займет много времени

SELECT name FROM xxx WHERE id = 50 LIMIT 1;

занимает около 8 секунд

Моя проблема, вероятно, в том, что MySQL читает всю строку, прежде чем он возвращает name, что составляет всего 255 символов ... поэтому, когда я хочу перечислить имена из 100 файлов, MySQL читает 10 ГБ и возвращает около 2 КБ результат.

1 Ответ

7 голосов
/ 16 января 2012

Попробуйте разбить большие двоичные объекты на отдельную таблицу.

Например, у вас может быть таблица xxx, содержащая столбцы id и name, и другая таблица xxx_data, содержащая столбцы id и data.Если вам нужно только имя, вам вообще не нужно запрашивать таблицу xxx_data;если вам нужно и имя, и данные, вы можете объединить таблицы, используя общий первичный ключ id:

SELECT id, name, data
FROM xxx JOIN xxx_data USING (id)
WHERE id = ...

Для получения дополнительной информации и идей по оптимизации см., например, 10 советов по оптимизацииMySQL запросы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...