РЕДАКТИРОВАТЬ: Для любого, кто найдет это позже, CI будет использовать много памяти при таких обстоятельствах, так как он создаст объект для каждой строки (использование result_array () не кажется намного лучше), поэтому лучшая ставкаэто просто использовать встроенные в PHP функции mysql.Если вы используете MYSQLI, вы можете получить доступ к ссылке на соединение следующим образом:
$this->db->conn_id
Я пытаюсь запустить скрипт через командную строку (проверяя, что будет cronjob), что делает скриптне имеет значения, так как он терпит неудачу при первом выборе и больше не получает.
Я использую Codeigniter 2.0.3.
Моя таблица выглядит так:
CREATE TABLE IF NOT EXISTS `graphic_files` (
`graphic_file_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`graphic_file_style_id` tinyint(2) unsigned NOT NULL,
`graphic_file_fm_id` bigint(20) unsigned DEFAULT NULL,
`graphic_file_config_line` varchar(255) NOT NULL,
`graphic_file_config_line_hash` varchar(32) NOT NULL,
`graphic_file_location` varchar(255) DEFAULT NULL,
`graphic_file_pack_id` int(10) unsigned NOT NULL,
`graphic_file_enabled` tinyint(1) NOT NULL,
`graphic_file_alternative` tinyint(1) NOT NULL,
`graphic_file_version` decimal(4,2) NOT NULL,
`graphic_file_time_added` int(11) unsigned NOT NULL,
`graphic_file_time_modified` int(11) unsigned NOT NULL,
`graphic_file_size` int(11) unsigned NOT NULL,
PRIMARY KEY (`graphic_file_id`),
KEY `graphic_file_style_id` (`graphic_file_style_id`),
KEY `graphic_file_fm_id` (`graphic_file_fm_id`),
KEY `graphic_file_config_line_hash` (`graphic_file_config_line_hash`),
KEY `graphic_file_pack_id` (`graphic_file_pack_id`),
KEY `graphic_file_enabled` (`graphic_file_enabled`),
KEY `graphic_file_version` (`graphic_file_version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=240752 ;
Есть 240 000 строк.
Я пытаюсь выбрать около 120 000 из них с помощью этого запроса:
SELECT * FROM graphic_files WHERE graphic_file_enabled = 0 AND graphic_file_style_id = 5
Но я получаю ошибку допустимого размера памяти, например, так:
Допустимый объем памяти 268435456 байт исчерпан (попытался выделить 92 байта) в файле xxx / codeigniter_2.0.3 / database / drivers / mysqli / mysqli_result.php в строке 167
Я понимаюпростой ответ заключается в том, что мне не хватает памяти, но это кажется нелепым, если просто выполнить запрос на выборку, особенно с большим разрешенным объемом памяти 256 МБ.
Кто-нибудь может предложить причину этого?Может быть, это связано с codeigniter и тем, как он строит объект результатов?