У меня есть большая таблица с идентификатором в качестве основного. Около 3 миллионов строк, и мне нужно извлечь небольшой набор строк на основе заданного списка идентификаторов.
В настоящее время я делаю это на where... in, но это очень медленно, от 5 до 10 секунд.
Мой код:
select id,fa,fb,fc
from db1.t1
where id in(15,213,156,321566,13,165,416,132163,6514361,... );
Я пытался запрашивать один идентификатор за раз, но это все еще медленно. подобно
select id,fa,fb,fc from db1.t1 where id =25;
Я также попытался использовать временную таблицу, вставить список идентификаторов и вызвать Join. Но никакого улучшения.
select id,fa,fb,fc from db1.t1 inner join db1.temp on t1.id=temp.id
Есть ли способ сделать это быстрее?
вот стол.
CREATE TABLE `db1`.`t1` (
`id` int(9) NOT NULL,
`url` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
`title` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL,
`lastUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`lastModified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Хорошо, вот объяснение выбора.
id=1,
select_type='SIMPLE',
table='t1',
type='range',
possible_keys='PRIMARY',
key='PRIMARY',
key_len= '4',
ref= '',
rows=9,
extra='Using where'
EXPLAIN <your query>
и опубликуйте результаты в своем вопросе в текстовой форме. - person peterm   schedule 03.10.2013CREATE
, которое вы упомянули вPRIMARY KEY (urlId)
, нет столбцаurlId
. - person peterm   schedule 03.10.2013SELECT @@key_buffer_size;
? Ваша таблица активно вставляется/обновляется, пока вы выбираете из нее? - person peterm   schedule 03.10.2013