Мне кажется плохой идеей использовать такой широкий столбец в качестве ключа, но, кроме этого, вы определенно можете сделать что-то вроде того, что вы предлагаете.Вам даже не нужно использовать MD5, все, что вам нужно, это хеш-функция, которая производит несколько коллизий, но уникальность не требуется.CRC32
производит небольшое значение и очень быстро.
Скажем, ваша таблица выглядит следующим образом:
CREATE TABLE data (lots_of_text VARCHAR(500));
измените его на:
CREATE TABLE data (text_hash INT, lots_of_text VARCHAR(500), INDEX (text_hash));
икогда вы вставляете строки, вы делаете:
INSERT INTO data (lots_of_text, text_hash)
VALUES ("lots and lots of text", CRC32("lots and lots of text"));
, а затем вы можете извлечь строки следующим образом:
SELECT lots_of_text FROM data
WHERE text_hash = CRC32("lots and lots of text")
AND lots_of_text = "lots and lots of text";
запрос будет использовать индекс на text_hash
, но с CRC32
не будет выдавать уникальные значения, вам все равно нужно проверить поле lots_of_text
на равенство - но запрос все равно будет быстрым, поскольку не более нескольких строк будут иметь одинаковый хэш.
Вариант этого состоит виспользуйте первые 50 символов или около того в качестве хэша, число строк с одинаковыми первыми 50 символами, скорее всего, будет низким.