Я не уверен, что именно здесь происходит медленно, поэтому я просто предлагаю другой способ хранения данных.
фрагменты : идентификатор, заголовок, URL, текст
ссылки : fromid, turl, toid
Я не эмулирую здесь хеширование для упрощения схемы, а также потому, что MySQL может хорошо индексировать строки. При необходимости хэши можно эмулировать с индексом md5 (в двоичном виде).
Итак, когда вы вставляете новый фрагмент, вы делаете следующее:
Вставьте новый фрагмент в БД и получите last_insert_id (). Поиск ссылки таблица записей, где toid = 0 и tourl = snippet.url . Обновление найдено в таблице links с новым значением toid . Это обратные ссылки для нашего фрагмента.
Извлечение ссылок из фрагмента и итерация фрагментов таблицы, где url = extract_link . Вставьте необходимые записи в ссылки таблицу.
Вот и все. Если это будет медленно, нам понадобится больше данных: какая часть этого является медленной точно, что является «медленной» и т. Д.
В моей схематической таблице ссылок содержатся как ссылки, так и обратные ссылки. Достаточно ли этого для ваших нужд?