Я пытался выполнить объединение в двух таблицах в MySQL, и запрос будет работать в течение минуты или двух, прежде чем у меня закончится память, не получая результатов. Я далек от эксперта по базам данных, поэтому не уверен, что я плохо писал свои запросы, если у меня неправильно настроены настройки MySQL или я действительно должен делать что-то еще с моим запросом. FYI база данных находится локально на моей машине.Плохое MySQL Присоединиться к производительности
У меня есть большая таблица (~ 2 миллиона записей), где один из столбцов - это идентификатор в небольшой таблице (~ 3000 записей). В случае, если это имеет значение, идентификатор не уникален в большой таблице, но уникален в маленькой таблице. Я пробовал различные вкусы следующего запроса, но ничего не кажется, работает:
SELECT big_table.*,
small_table.col
FROM big_table
left outer join small_table on (big_table.small_id = small_table.id)
Я делаю много анализа на данных, требует все 2 миллиона строк, хотя и не обязательно в одном запрос. Вот результаты моих «создать таблицу шоу»:
'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'
Вот это «объяснить» результат для одного из моих кандидатов запросов:
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
И какие у вас индексы? Если вы скажете, что это, вероятно, проблема. – James
Как вы выполняете запрос? В браузере запросов MySQL? С языка программирования? Если последний, на каком языке, и можете ли вы разместить соответствующую часть кода? Кроме того, зачем вам читать 2 миллиона строк? Что вы будете делать со всеми этими данными? –
И опубликуйте вывод 'EXPLAIN SELECT ...' для вашего запроса и вывод 'SHOW CREATE TABLE big_table' и' SHOW CREATE TABLE small_table'. –