AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 5766
Accepted
Rick James
Rick James
Asked: 2011-09-15 09:34:41 +0800 CST2011-09-15 09:34:41 +0800 CST 2011-09-15 09:34:41 +0800 CST

Quando os índices de hash se tornam razoáveis?

  • 772

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

mysql performance
  • 3 3 respostas
  • 4332 Views

3 respostas

  • Voted
  1. Jonathan
    2011-09-15T09:53:54+08:002011-09-15T09:53:54+08:00

    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.

    • 3
  2. Best Answer
    Gary Lindahl
    2011-09-17T17:42:44+08:002011-09-17T17:42:44+08:00

    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.

    • 3
  3. gview
    2011-09-15T19:58:45+08:002011-09-15T19:58:45+08:00

    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 .

    • 0

relate perguntas

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve