У меня есть таблица MySQL, состоящая из:
CREATE TABLE `url_list` (
`id` int(10) unsigned NOT NULL auto_increment,
`crc32` int(10) unsigned NOT NULL,
`url` varchar(512) NOT NULL,
PRIMARY KEY (`id`),
KEY `crc32` (`crc32`)
);
При вставке данных в связанную таблицу мне нужно найти первичный ключ из этой таблицы, и использование crc32 действительно ускоряет это, в то же время позволяя небольшой индекс. URL-адреса должны быть уникальными, но я бы хотел, чтобы индекс не превышал фактических данных.
Если значение отсутствует, мне нужно его вставить, но использование таких структур, как INSERT IGNORE
или ON DUPLICATE KEY
, либо требует, чтобы я поместил уникальное значение в огромный varchar, либо не использует мои индекс.
Как я могу "ВЫБЕРИТЕ идентификатор еще, ВСТАВИТЬ", сохраняя при этом скорость поиска для 80-90% попаданий, которые уже есть в таблице?