Solo puede acceder a los elementos por su clave principal en una tabla hash. Esto es más rápido que con un algoritmo de árbol (en O(1)
lugar delog(n)
), pero no puede seleccionar rangos ( todo entre x
yy
). Los algoritmos de árbol admiten esto Log(n)
mientras que los índices hash pueden dar como resultado un escaneo completo de la tabla O(n)
. Además, la sobrecarga constante de los índices hash suele ser mayor (lo que no es un factor en la notación theta, pero aún existe ). Además, los algoritmos de árbol suelen ser más fáciles de mantener, crecer con datos, escalar, etc.
Los índices hash funcionan con tamaños hash predefinidos, por lo que terminas con algunos "cubos" donde se almacenan los objetos. Estos objetos se repiten de nuevo para encontrar realmente el correcto dentro de esta partición.
Entonces, si tiene tamaños pequeños, tiene mucha sobrecarga para elementos pequeños, los tamaños grandes dan como resultado un mayor escaneo.
Los algoritmos de tablas hash de hoy en día generalmente escalan, pero el escalado puede ser ineficiente.
De hecho, existen algoritmos de hash escalables. No me preguntes cómo funciona, también es un misterio para mí. AFAIK, evolucionaron a partir de una replicación escalable donde volver a aplicar hash no es fácil.
Su llamado Rush - R eplication U nder S calable H incineración, y esos algoritmos son así llamados algoritmos Rush.
Sin embargo, puede haber un punto en el que su índice supere un tamaño tolerable en comparación con sus tamaños de hash y su índice completo deba reconstruirse. Por lo general, esto no es un problema, pero para bases de datos enormes, esto puede llevar días.
La compensación por los algoritmos de árbol es pequeña y son adecuados para casi todos los casos de uso y, por lo tanto, son predeterminados.
Sin embargo, si tiene un caso de uso muy preciso y sabe exactamente qué y solo qué se va a necesitar, puede aprovechar los índices hash.