我在本地mysql实例和服务器上有一个很大的性能问题。我有一个请求:
DELETE a
FROM a
LEFT OUTER JOIN
( SELECT MAX(id) as id,
`v_id`,
`v_statut`,
`c_controle`,
`c_d_controle`
FROM `a`
GROUP BY `v_id`,
`v_statut`,
`c_controle`,
`c_d_controle`
) AS t1 ON `a`.id = t1.id
WHERE t1.id IS NULL;请求的目的是删除由组标识的重复。我已经为这个组创建了密钥。
在我的本地服务器(5.6.17)中,这个请求在70万行上大约是15秒,而在服务器(5.5.43)上,这个请求是无休止的。
是否有任何mysql调优或SQL请求优化可以帮助我。
谢谢。
创建表:
Create Table"
temp_import_vigipresse "CREATE TABLE `temp_import_vigipresse` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_creation` datetime DEFAULT NULL,
`vigipresse_id` int(11) NOT NULL,
`vigipresse_tele_id` varchar(8) DEFAULT NULL,
`inutile_date` date DEFAULT NULL,
`vigipresse_statut_depot` tinyint(4) NOT NULL,
`vigipresse_commentaire` varchar(255) DEFAULT NULL,
`vigipresse_type_parution` tinyint(4) DEFAULT NULL,
`vigipresse_admission_id` int(11) DEFAULT NULL,
`date_depot` datetime DEFAULT NULL,
`etablissement_code_regate` varchar(6) DEFAULT NULL,
`etat_date_film` tinyint(4) DEFAULT NULL,
`date_film` date DEFAULT NULL,
`vigipresse_code_hld` tinyint(4) DEFAULT NULL,
`vigipresse_lot_stp` tinyint(4) DEFAULT NULL,
`code_statut_resultat` tinyint(4) DEFAULT NULL,
`commentaire_resultat_controle` varchar(255) DEFAULT NULL,
`valeur_resultat_controle` varchar(255) DEFAULT NULL,
`code_critere_controle` tinyint(4) NOT NULL,
`code_departement_postal_controle` varchar(2) DEFAULT NULL,
`numero_oqs_saisi` smallint(6) DEFAULT NULL,
`vigipresse_numero_parution_constate` int(11) DEFAULT NULL,
`inutile_numero_parution` varchar(255) DEFAULT NULL,
`vigipresse_type_parution_declare` tinyint(4) DEFAULT NULL,
`vigipresse_date_depot_prevue` date DEFAULT NULL,
`vigipresse_quantite_articles` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `vigipresse_id_statut_code`
(`vigipresse_id`,`vigipresse_statut_depot`,`code_critere_controle`),
KEY `vigipresse_id_statut` (`vigipresse_id`,`vigipresse_statut_depot`),
KEY `vigi_unique`
(`vigipresse_id`,
`vigipresse_statut_depot`,
`code_critere_controle`,
`code_departement_postal_controle`)
) ENGINE=MyISAM AUTO_INCREMENT=730705 DEFAULT CHARSET=utf8"解释当地情况(5.6):
1,temp_import_vigipresse,ALL,NULL,NULL,228470,NULL 1,PRIMARY,,ref,,,5,qspresse.temp_import_vigipresse.id,10,“使用其中”2,派生,temp_import_vigipresse,ALL,vigi_unique,NULL,228470,“使用临时;使用文件短”
解释服务器(5.5)
无止境的请求
发布于 2015-04-17 02:56:31
EXPLAIN SELECT子查询。(这将解决jynus提出的问题。)
通过将vigi_unique添加到其末尾,您的键id可以做得更好。这将使解释改为“使用索引”,因为它将是一个“覆盖指数”。
但5.6更快的真正原因是.
建议在5.6上使用EXPLAIN FORMAT=JSON SELECT ...来查看更多内容。
您应该考虑搬到InnoDB。
另一种方法是创建一个新表(有一个唯一的索引来防止将来的dups),用INSERT ... SELECT DISTINCT ...填充它,然后RENAME TABLE将它移动到适当的位置。
https://dba.stackexchange.com/questions/97812
复制相似问题