Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Out of memory при DISTINCT+ORDER BY (Alex Kud) 24/02/2007 - 19:11:45



From: Alex Kud - 24/02/2007 - 19:11:45
Subject:Out of memory при DISTINCT+ORDER BY
-----------------
Имеется таблица 10 столбцов, все типа TEXT, ~1500 строк. Надо выполнять такой запрос:

select distinct * from `list` order by `<один из столбцов>` limit 1000;

При этом получаю ошибку:

ERROR 1037 (HY001): Out of memory; restart server and try again (needed 217080 bytes)

Если убрать в запросе disitnct или order by, ошибки нет. Величина limit не влияет. Как я понимаю, сначала производится вся сортировка, а потом возвращается limit строк от отсортированного.
Пытался менять значения для некоторых переменных в my.ini, отвечающих за объемы выделяемой памяти при сортировке, но безрезультатно.
После некоторых таких запросов не просто выдало ошибку запроса, а вывалился даже mysqld-nt.exe с ошибкой приложения (MySQL v5.0.27 for Windows).
Почитав документацию, сделал такой запрос:

select SQL_BIG_RESULT distinct * from `list` order by `<один из столбцов>` limit 1000;

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

"Параметр SQL_BIG_RESULT можно использовать с GROUP BY или DISTINCT, чтобы сообщить оптимизатору, что результат будет содержать большое количество строк. Если указан этот параметр, MySQL при необходимости будет непосредственно использовать временные таблицы на диске, однако предпочтение будет отдаваться не созданию временной таблицы с ключом по элементам GROUP BY, а сортировке данных."

Помогло. И все-таки я не очень уверен в правильности такого решения проблемы. Почему происходит такая ошибка? Какой памяти не хватает, как можно ее увеличить? Насколько правильно использовать как решение проблемы SQL_BIG_RESULT? Не замедляет ли это выполнение запроса? Таблица будет увеличиваться до ~30000-50000 строк, не столкнусь ли я с такой проблемой в дальнейшем?
Буду очень признателен любым советам или размышлениям по этой проблеме. :)


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
30832



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |