У меня есть большая таблица MySQL InnoDB (около 1 миллиона записей, увеличивающаяся на 300 тысяч в неделю), скажем, с сообщениями в блогах. Эта таблица имеет поле URL с индексом.
Добавляя в него новые записи, я проверяю наличие существующих записей с тем же URL-адресом. Вот как выглядит запрос:
SELECT COUNT(*) FROM `tablename` WHERE url='http://www.google.com/';
В настоящее время система производит около 10-20 запросов в секунду, и это количество будет увеличено. Я думаю о повышении производительности, добавив дополнительное поле, которое представляет собой хеш MD5 URL-адреса.
SELECT COUNT(*) FROM `tablename` WHERE md5url=MD5('http://www.google.com/');
Таким образом, он будет короче и с постоянной длиной, что лучше для индекса по сравнению с полем URL. Что вы, ребята, думаете об этом. Имеет ли это смысл?
Другое предложение моего друга - использовать CRC32 вместо MD5, но я не уверен, насколько уникальным будет результат CRC32. Дайте мне знать, что вы думаете о CRC32 для этой роли.
ОБНОВЛЕНИЕ: столбец URL уникален для каждой строки.