J'ai essayé d'effectuer une jointure sur deux tables dans MySQL, et la requête sera exécutée pendant une minute ou deux avant de manquer de mémoire sans obtenir des résultats. Je suis loin d'être un expert en base de données, donc je ne sais pas si j'écris mal mes requêtes, si j'ai des paramètres MySQL mal configurés, ou si je devrais vraiment faire autre chose avec ma requête. Pour info, la base de données est située localement sur ma machine.MySQL Une mauvaise performance Rejoignez
J'ai une grande table (~ 2 millions d'enregistrements) où l'une des colonnes est un ID dans une petite table (~ 3000 dossiers). Dans le cas où cela est important, l'ID n'est pas unique dans la grande table mais est unique dans la petite table. J'ai essayé différentes saveurs de la requête suivante, mais rien ne semble fonctionner:
SELECT big_table.*,
small_table.col
FROM big_table
left outer join small_table on (big_table.small_id = small_table.id)
Je fais beaucoup d'analyse sur les données qui nécessite les 2 millions de lignes, mais pas nécessairement en une seule question. Voici les résultats de mon « show create table »:
'big_table', 'CREATE TABLE 'big_table' (
'BIG_ID_1', varchar(12) NOT NULL,
'BIG_ID_2', int(100) NOT NULL,
'SMALL_ID' varchar(8) DEFAULT NULL,
'TYPICAL_OTHER_COLUMN' varchar(3) DEFAULT NULL,
...
PRIMARY KEY ('BIG_ID_1', 'BIG_ID_2')
) ENGINE=MyISAM DEFAULT CHARSET=latin1'
'small_table', 'CREATE TABLE `small_table` (
`id`, varchar(8) NOT NULL DEFAULT '''',
`col`, varchar(1) DEFAULT NULL,
...
PRIMARY KEY (`id`),
KEY `inx_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1'
Voici le résultat « expliquer » pour un de mes requêtes candidats:
id select_type table type possible_keys key key_len ref rows extra 1 SIMPLE big_table ALL NULL NULL NULL NULL 1962193 1 SIMPLE small_table eq_ref PRIMARY,inx_id PRIMARY 10 db_name.big_table.SMALL_ID 1
Et quels indices avez-vous? Si vous n'en dites aucun, c'est probablement le problème. – James
Comment exécutez-vous la requête? Dans le navigateur de requête MySQL? D'un langage de programmation? Si ce dernier, quelle langue, et pouvez-vous poster la partie pertinente du code? Aussi, pourquoi avez-vous besoin de lire 2 millions de lignes? Que ferez-vous avec toutes ces données? –
Et publier la sortie de 'EXPLAIN SELECT ...' pour votre requête, et la sortie de 'SHOW CREATE TABLE big_table' et' SHOW CREATE TABLE small_table'. –