Это продолжение отладки ошибки вставки mysql в php , так как у меня теперь есть время продолжить проект.
У меня есть три таблицы с этой проблемой:
840,721плакаты в poster_prodcat
58 506 категорий плакатов в poster_categories
17 629 007 (17 миллионов +) комбинаций плакатов / категорий в плакате_prodcat
На основе презентации «Эффективное разбиение на страницы» в Yahoo !, я пытаюсь добавить рейтинг категориичисло для poster_prodcat, чтобы мы могли постранично ранжировать, а не использовать ограничения и смещения.Несмотря на то, что мой тайм-аут подключения php mysql был увеличен до 3600 (сумасшествие, которое я знаю), а время тайм-аута php изменилось, упорядочение никогда не завершается.может быть, от нескольких десятков до, может быть, ста тысяч или около того, но не полный набор в 17 000 000.
Вот сценарий:
$sql1="select distinct apcatnum from poster_prodcat";
$result1 = mysql_query($sql1);
while ($cats = mysql_fetch_array ($result1)) {
$sql2 = "SELECT poster_data.apnumber,poster_data.aptitle
FROM poster_prodcat,poster_data
WHERE poster_prodcat.apcatnum ='$cats[apcatnum]'
AND poster_data.apnumber = poster_prodcat.apnumber
ORDER BY aptitle ASC";
$result2 = mysql_query($sql2);
$ordernum=1;
while ($order = mysql_fetch_array ($result2)) {
$sql3 = "UPDATE poster_prodcat SET catorder='$ordernum'
WHERE apnumber='$order[apnumber]' AND apcatnum='$cats[apcatnum]'";
$result3 = mysql_query($sql3);
$ordernum++;
}
}
Это на 2-гигабитном сервере, на котором также размещается сайт.Время ожидания велико, и сервер не падает, поэтому я не вижу, что мешает ему завершить работу.Могу ли я сделать это на этом сервере, или, поскольку это операция раз в месяц или около того, я должен просто создать какой-нибудь большой экземпляр памяти EC2, выполнить сортировку и загрузить загруженные таблицы?
Спасибо.
Вот структура poster_data (с некоторыми удаленными полями, которые не участвуют в выборках):
CREATE TABLE `poster_data` (
`apnumber` mediumint( 8 ) NOT NULL DEFAULT '0',
`aptitle` varchar( 255 ) NOT NULL DEFAULT '',
`aptype` varchar( 100 ) NOT NULL DEFAULT '',
[snip]
UNIQUE KEY `posterid` ( `apnumber` ) ,
KEY `aptitle` ( `aptitle` ) ,
KEY `aptype` ( `aptype` ) ,
KEY `title_type` ( `aptitle` , `aptype` ) ) ENGINE = InnoDB;
poster_prodcat:
CREATE TABLE `poster_prodcat` (
`apcatnum` mediumint( 8 ) NOT NULL DEFAULT '0',
`apnumber` mediumint( 8 ) NOT NULL DEFAULT '0',
`catorder` mediumint( 7 ) NOT NULL DEFAULT '0',
PRIMARY KEY ( `apcatnum` , `apnumber` ) ,
KEY `apcatnum` ( `apcatnum` ) ,
KEY `apnumber` ( `apnumber` ) ,
KEY `catorder` ( `catorder` )
) ENGINE = InnoDB /*!50100 PARTITION BY HASH (apcatnum) PARTITIONS 10 */;