Мне нужно сохранить xml-строки в MySQL-DB с очень простой структурой таблиц.Поиск длинной строки в большой базе данных mysql
xml_ID int(10), xml text
При вставке новой строки я хочу проверить наличие дубликатов. Моя БД содержит почти более 10 тыс. Элементов, а сравнение с ГДЕ происходит очень медленно. Поэтому я решил добавить столбец и заполнить его контрольными суммами строк.
xml_ID int(10), xml text, md5 binary(32)
Поскольку контрольная сумма не является биникой для строки, я могу не только сравнить контрольные суммы. Поэтому мне по-прежнему приходится сравнивать сами строки.
Теперь на мой вопрос: Что происходит быстрее/лучше? Избранная запрос, содержащий 2, где условия, такие как:
SELECT xml_ID
FROM table
WHERE
md5=MD5('<content>hello</content>') AND
xml='<content>hello</content>'
или запрос с использованием подзапроса как:
SELECT xml_ID
FROM (
SELECT *
FROM table
WHERE md5=MD5('<content>hello</content>')
) AS t
WHERE xml='<content>hello</content>'
я тестировал его до сих пор, но оба запроса необходимо почти в то же время для результата.
Обязательна ли контрольная сумма?
Я также открыты для любых других предложений ...
Спасибо ...
Первая версия должна быть немного быстрее. Если вы создали контрольную сумму и все еще нуждаетесь в сравнении строк, в чем смысл? У вас есть индексы на этой таблице? –
xml_ID - это первичный ключ, и нет других индексов, и никаких других колонок ..... и сравнение строк не требуется, потому что контрольная сумма ist not biunique ...... моя идея с использованием контрольной суммы уменьшает результаты для прямого сравнение строк –
Сначала база данных будет использовать индекс MD5, если она доступна. Первый запрос будет немного быстрее. –