Даже если ограничение памяти составляет 256 мегабайт, это не значит, что ваш скрипт сможет выделить столько. Причина в том, что оперативная память распределяется между различными процессами. Некоторые из них могли бы выделить много памяти и оставить ОС с несколькими мегабайтами, поэтому ваш скрипт не может выделить столько, сколько ему нужно, независимо от установленного ограничения.
На что вам следует обратить внимание - это использовать как можно меньше оперативной памяти. Для результатов базы данных, таких как ваш, лучше использовать SplFixedArray , а не "обычный" массив PHP.