MySQL nativamente não suporta índices de hash. Então, fazer uma pseudo coluna hash e criar um índice em uma coluna hash requer algum pensamento.
E parece ser amplamente entendido que, se o campo de texto for longo, os hashes valem a sobrecarga que exigem. Mas quanto tempo deve ser o texto para começar a pensar em hash?
Se eu pretendo usar hash de 128 bits, o limite de quantos caracteres seria um mínimo suficiente para uma coluna de texto?
Editar detalhes listados em minha outra pergunta pode ser útil https://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram
Não tenho certeza de quais são seus motivos para querer um índice de hash.
Mas se você está procurando indexar colunas de texto/varchar, então você pode ir com MyISAM/full-text ou pode usar algo externo como Sphinx ou Lucene.
Como alternativa, você pode criar uma coluna adicional com uma versão hash de outra e, desde que tenha 1.000 bytes ou menos, ela pode ser indexada pelo MySQL.
Espero ter respondido a sua pergunta.
Começa a ficar razoável quando começa a salvar seu disco. Mas, ao mesmo tempo, começa a consumir seu poder computacional.
Hoje em dia, o espaço em disco é considerado barato, mas se você estiver usando SSD, não é tão barato. Como você precisa de correspondência exata, não será necessária muita CPU, portanto, pode ser uma opção melhor.
E a resposta exata à sua pergunta sobre o comprimento da coluna de texto para satisfazer o uso de hashes pode variar com base em muitos fatores, a partir da habilidade do DBA para carregar no sistema.
Mas se você economizar mais de 50% da RAM usando hashes e a economia total de RAM for de pelo menos 2 GB, acho que talvez valha a pena seguir esse caminho, caso contrário, talvez seja um ensaio desnecessário.
Depois de ler sua descrição, pude ver como um hash faria sentido. No entanto, quando você fala sobre uso de memória, o tamanho de uma coluna de índice não impossibilita a pesquisa de um grande conjunto de dados. A tecnologia de indexação básica do mysql é uma btree. Btrees dividem e conquistam.
O conselho específico que posso dar é o seguinte: vamos supor que você usará um hash md5(). Para máxima eficiência, você deve tornar o hash a chave primária das tabelas do mecanismo innodb, onde o hash é um char(32). Como o innodb possui índices clusterizados, a recuperação dos dados economizará nas leituras do disco e também haverá um trabalho reduzido que precisa ser feito quando você usar um char, como você poderá fazer, pois o resultado do hash md5 () nunca muda .