Mysql
MySQL - 簡單更新非常慢並且導致大量伺服器的高負載平均
簡單的更新非常慢並且導致大量伺服器的高負載平均:
表名:
CREATE TABLE IF NOT EXISTS `LISTE_PROMOTION3` ( `id_list_prom` int(11) NOT NULL AUTO_INCREMENT, `id_hotel` int(11) NOT NULL, `id_marche` int(11) NOT NULL, `lib_promo` varchar(250) NOT NULL, `etat_promo` enum('T','F') NOT NULL DEFAULT 'T', `type_promo` varchar(250) NOT NULL, `debut_vente` date NOT NULL, `fin_vente` date NOT NULL, `debut_sejour` date NOT NULL, `fin_sejour` date NOT NULL, `min_sty` int(11) NOT NULL, `max_sty` int(11) NOT NULL, `free_night` int(11) NOT NULL, `type_free_night` varchar(250) NOT NULL, `priorite_promo` int(11) NOT NULL, `typ_prom` varchar(250) NOT NULL, `pourcent_red_lpd` float NOT NULL, `pourcent_red_dp` float NOT NULL, `pourcent_red_dpplus` float NOT NULL, `pourcent_red_pc` float NOT NULL, `pourcent_red_pcplus` float NOT NULL, `pourcent_red_aisoft` float NOT NULL, `pourcent_red_allin` float NOT NULL, `pourcent_red_ultraai` float NOT NULL, `montant_red_lpd` float NOT NULL, `montant_red_dp` float NOT NULL, `montant_red_dpplus` float NOT NULL, `montant_red_pc` float NOT NULL, `montant_red_pcplus` float NOT NULL, `montant_red_aisoft` float NOT NULL, `montant_red_allin` float NOT NULL, `montant_red_ultraai` float NOT NULL, `id_agent` int(11) NOT NULL, `date_insertion` datetime NOT NULL, `date_modif` datetime NOT NULL, `id_agent_modif` int(11) NOT NULL, `typ_app_prom` varchar(250) NOT NULL, `sur_tarif` varchar(250) NOT NULL, `pourcent_red_ls` float NOT NULL, `montant_red_ls` float NOT NULL, PRIMARY KEY (`id_list_prom`), KEY `id_hotel` (`id_hotel`), KEY `etat_promo` (`etat_promo`), KEY `fin_vente` (`fin_vente`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9480 ;
該表包含 9480 行。
詢問:
UPDATE `LISTE_PROMOTION` SET `etat_promo` = 'T' WHERE `id_list_prom` = 9460;
此查詢更新 1 行,大約需要 25 秒才能完成,並導致大量伺服器的高負載平均。
擺脫標誌 (
etat_promo
) 上的索引。優化器幾乎從不使用此類;它會更喜歡進行表掃描。如果您有一些您認為可能正在使用該索引的查詢,請執行並向EXPLAIN
我們展示該查詢以供進一步討論。
解釋更新
LISTE_PROMOTION
集etat_promo
= ‘T’ WHEREid_list_prom
= 9460;