Есть таблица с текстовым полем, содержащим ссылки. В разных строках таблицы эти ссылки произвольной длины. В таблице 14 млн строк. Мне нужно брать ссылку из произвольной строки и очень быстро находить ее дубли в других строках. Т.е. тут идет поиск по полю целиком, а не частичное совпадение.
Что я пробовал делать:
url='$url' - запрос обрабатывается около 10 секунд.url='$url' - запрос обрабатывается около 10 секунд, т.е. не дало никакого прироста.url like '%$url%' не вижу смысла, т.к. я не ищу в нем частичные совпаденияurl like '$url' не вижу смысла, т.к. это еще медленнее, чем
url='$url'Посоветуйте, как правильно, и главное - быстро, искать в таком случае?
Добавь ещё одно поле и сгенери в него хэш от ссылок. Любой короткий быстрый хэш. Например, CRC32. Уже это поле проиндексируй (можно целиком, а можно первые 2-3 байта - хватит вполне). И по этому полю ищи совпадения. А только потом проверяй сам урл.
Поиск по короткому (НЕ уникальному!) хэшу даст огромный прирост скорости. Но всё равно придётся после этого сравнить и сами урлы. Поэтому индекс лучше сделать составным.
..,
crc32 char, // byte, clob, blob.. raw
url varchar,
index idx crc32(4), url(8),
..,
А искать потом например так:
where crc32 = :crc32
and url = :url
Должно просто летать!
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости