首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL5.5和5.6之间的差异

MySQL5.5和5.6之间的差异
EN

Database Administration用户
提问于 2015-04-14 14:41:43
回答 1查看 223关注 0票数 3

我在本地mysql实例和服务器上有一个很大的性能问题。我有一个请求:

代码语言:javascript
复制
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请求优化可以帮助我。

谢谢。

创建表:

代码语言:javascript
复制
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):

id,select_type,表,类型,possible_keys,键,key_len,ref,行,额外的

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)

无止境的请求

EN

回答 1

Database Administration用户

发布于 2015-04-17 02:56:31

EXPLAIN SELECT子查询。(这将解决jynus提出的问题。)

通过将vigi_unique添加到其末尾,您的键id可以做得更好。这将使解释改为“使用索引”,因为它将是一个“覆盖指数”。

但5.6更快的真正原因是.

  • 子查询在“左联接”之后,因此5.5会一次又一次地对其进行评估(我认为),以及
  • 5.6将为子查询创建索引(动态)。

建议在5.6上使用EXPLAIN FORMAT=JSON SELECT ...来查看更多内容。

您应该考虑搬到InnoDB。

另一种方法是创建一个新表(有一个唯一的索引来防止将来的dups),用INSERT ... SELECT DISTINCT ...填充它,然后RENAME TABLE将它移动到适当的位置。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/97812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档