Какой тип таблицы выбрать?

Ямерт

The Old One
Какой тип таблицы выбрать?

Привет!

Такая ситуация: есть таблица типа MyISAM, в ней порядка 5,000 записей. Запросы в основном UPDATE, реже INSERT, SELECT вообще экзотика. В таблице хранятся данные о том, сколько раз просматривалась та или иная статья. Портал, где публикуются данные статьи, очень посещаем. Админ начал жаловаться, что на сервере висит много процессов, которые ждут доступа на UPDATE в эту самую таблицу.
Оказывается, при UPDATE таблица MyISAM лочится полностью, не только затрагиваемые ряды (как это, к примеру, в InnoDB).

Пока решение проблемы вижу в том, чтобы поменять тип таблицы на InnoDB.
Что посоветуете, профессионалы MySQL?
 

Falc

Новичок
Ямерт
Могу посоветовать с оптимизировать апдейты
 

Demiurg

Guest
поменять то можно, но innoDB само по себе медленнее работает. Может стоит пересмотреть логику апдейта ?
 

Ямерт

The Old One
Да там в общем-то и оптимизировать нечего:
update ARTICLE_VIEWS set VIEWS=VIEWS+1 where ARTICLE_ID=1111 and DATE='2004-01-29'
 

Demiurg

Guest
Оптимизировать надо не сам запрос а логику. например апдейтить не саму таблицу, а другую, поменьше. И по крону скидывать данные из маленькой таблицы в большую
 

Falc

Новичок
Ямерт
Надеюсь у тебя составной индекс на ARTICLE_ID,DATE стоит?
 

Falc

Новичок
Demiurg
Апдейт в таблице из 5 тыс записях это ерунда, он не может тормозить. Если конечно он затрагивает только несколько записей а не всю таблицу.
 

Ямерт

The Old One
Falc
Лочится ВСЯ MyISAM-таблица по-любому, притом идёт много одновременных запросов. Тормозит ещё как. С индексами порядок.
InnoDB вроде бы медленно работает с SELECT, а с UPDATE нормально.
Demiurg можно, конечно, но это как удаление гланд через задний проход...
 

Demiurg

Guest
>Demiurg можно, конечно, но это как удаление гланд через задний проход...
почему , я обычно логи пишу в файл, потом по крону вытаскиваю из них нужную информацию в базу.
 

Falc

Новичок
Ямерт
>>притом идёт много одновременных запросов.
Сколько?
И сколько записей в среднем апдейтится одним апдейтом?
 

Ямерт

The Old One
Falc
Сколько - я точно не знаю, да это и не важно. Апдейтится 1 запись.
Demiurg этот вариант мне не подходит - хотят, чтобы была только одна таблица.
Попробую-таки перейти на InnoDB, посмотрим что получится.
 

Falc

Новичок
Ямерт
У меня несколько запросов в секунду на апдейт в таблице из нескольких милионов записей идет и ничего.
 

chira

Новичок
создать таблицу
Код:
create table ARTICLE_VIEWS_DAY type=heap as select ARTICLE_ID,0 views from ARTICLE_VIEWS;
в течении дня апдейтить в ней записи и раз в сутки переписывать данные в основную таблицу.
 

Falc

Новичок
chira
Ты думаешь из-за 5-ти тыс записей стоит такое делать?
 

Falc

Новичок
chira
Это может быть сложным если апдейт завязан на даные из этой же таблицы.
 

chira

Новичок
Falc

что сложного вместо:
Код:
update ARTICLE_VIEWS set VIEWS=VIEWS+1 where ARTICLE_ID=1111 and DATE='2004-01-29' 
писать:
update ARTICLE_VIEWS_DAY set VIEWS=VIEWS+1 where ARTICLE_ID=1111
 

Falc

Новичок
chira
Это при условии что автору надо обновлять статьи только с сегодняшней датой.
 

chira

Новичок
Falc
Что ты ерунду несёшь, смотрю страницу сегодня, а данные обновляю за вчера?
 

Falc

Новичок
chira
Ну хорошо уговорил что для даноой задачи это будет просто, но испоьзовать тип heap для такой таблицы не правильно, т.к. при сбое мы можем потерять данные за целый день.
Опять же подчеркуну что для такой простой задачи я бы не стал вводить дополнительную таблицу. Я вообще не понимаю как апдейт не индексного поля может тормозить или у автора на него кучу индексов навешано.
 
Сверху