Когда просматриваю всe табицы в phpmyadmin, то в самой нижней строчке показывает - InnoDB А так во всех таблицах тип - MyISAM. Я так полагаю что InnoDB тип БД? Как его поменять на MyISAM?
Апельсин А при таком запросе какой тип таблицы лучше использовать? PHP: $ip=getenv("HTTP_X_FORWARDED_FOR"); if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); } # уд. старые сессии mysql_query ("DELETE FROM online_eng, WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time) > 60") or die ("Can't delete old sess"); mysql_query ("DELETE FROM online WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time) > 60") or die ("Can't delete old sess"); # проверка на присутстаие или занесение нового пользователя $select = mysql_query ("SELECT ip FROM online_eng WHERE ip='$ip'") or die ("Can't select duble"); $tmp = mysql_fetch_row ($select); if ($ip == $tmp[0]) { mysql_query ("UPDATE online_eng SET time=NOW() WHERE ip='$ip'") or die ("Can't update"); } else { mysql_query ("INSERT INTO online_eng (ip,time) VALUES ('$ip',NOW())") or die ("Can't insert"); }
это мало как относится к типу таблиц. юзай myisam, если записей до пару десятков тысяч предвидеться и не парь себе голову.
добрый день есть мнение, что не стоит, наверное, при каждом запросе к странице сайта выполнять DML операции с базой. всё равно какой тип у таблицы (если это, конечно, не memory). если вы хотите удалять сессии пользователей, которые в течение 60 секунд не отправили нового запроса, то запускайте удаление раз в минуту хотя бы. и уберите это странное использование unix_timestamp(). замените его на Код (Text): '... where time < '.($_SERVER['REQUEST_TIME'] - 60) если одновременно активных сессий будет мало, то time можно не индексировать. да, всю вторую половину кода (после комментария) замените на Код (Text): mysql_query ("insert into online_eng (ip,time) values ('$ip','{$_SERVER['REQUEST_TIME']}') on duplicate key update time = values(time)"); и это... поддерживать две таблицы online довольно странно (ровно вдвое дороже). p.s. а вообще, чтобы поддерживать сессию пользователя в статусе online, лучше использовать кэш (или memory-таблицы), из которого раз в ту же самую минуту сбрасывать обновлённые данные в базу. но тогда тут всё придётся переписать... и немного подумать перед тем, как сделать правильно.