Есть таблица с текстовым полем, содержащим ссылки. В разных строках таблицы эти ссылки произвольной длины. В таблице 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
Должно просто летать!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Выполняем запрос: SELECT id, name, rank FROM table ORDER BY rank DESC, id DESC Мне нужно получить позицию в этой выдаче строки с фиксированным id (например id=50)Как это...
помогите решить проблемуНе знаю в какую сторону капать
Как мы знаем в основном html-теги поделены на несколько типов отображения, часто используемые это inline и block