Update большого количества строк

zip111

Новичок
Update большого количества строк

Есть таблица в которой более шести миллиона строк, так вот каждые сутки по крону делается обнуление одного поля во всех строках таблицы, что занимает более 400 секунд времени на выделенном сервере и, естественно, постоянно растет. Какой может быть выход из данной ситуации?
 

baev

‹°°¬•
Команда форума
Удалить поле, потом снова создать?
 

zip111

Новичок
CREATE TABLE campaign (
id int(10) unsigned NOT NULL auto_increment,
user_id int(10) unsigned NOT NULL,
c_name varchar(25) collate cp1251_bin NOT NULL,
c_type tinyint(1) default NULL,
c_region varchar(15) collate cp1251_bin NOT NULL,
c_key varchar(15) collate cp1251_bin NOT NULL,
c_about varchar(70) collate cp1251_bin NOT NULL,
c_link varchar(50) collate cp1251_bin NOT NULL,
c_status tinyint(1) NOT NULL,
c_budget decimal(10,2) default '0.00',
link_cost decimal(10,2) default '0.00',
c_trans int(11) default '0',
c_shows int(11) default '0',
budg_today decimal(10,2) default '0.00',
cost_all decimal(10,2) default '0.00',
PRIMARY KEY (id),
KEY link_cost (link_cost),
KEY budg_today (budg_today),
KEY c_type_2 (c_type,c_status,c_key,c_region),
KEY c_budget (c_budget),
KEY c_type (c_type),
KEY user_id (c_status,user_id),
KEY index_userid (user_id)
) ENGINE=MyISAM

Вот поле budg_today постоянно должно обнуляться
 

Gas

может по одной?
На нём же индекс висит.
Попробуй перед обновлением сделать alter tabe campaign disable keys; а после alter tabe campaign enable keys;
 

zip111

Новичок
Да даже без индекса обновление делается ~200 секунд. Тут надо менять подход, видимо, в корне.
 

baev

‹°°¬•
Команда форума
Я ж написал: «Удалить поле, потом снова создать» (ALTER TABLE ...)
 

no_santa

Снегур
1. Проверить корректность mysql_open и mysql_close . Однажды я решил страшный баг с зависанием mysql простой оптимизацией функций доступа к БД.
2. Проверить возможность свертывания запросов в один за счет оптимизации условий запроса. Вроде у тебя искомый ключ является первичным? Включи это условие на уровне логики - должно ускориться в 2-3 раза (мне помогло).
 
Сверху