Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

149
Visualizações
¿Es más eficiente indexar columnas en SQL o crear una nueva tabla?

Tengo una tabla SQL llamada "EVENTO" y una tabla de copia llamada "PAST_EVENT". La tabla EVENT tiene una clave externa a su PAST_EVENT correspondiente. Dado que:

  1. Cualquier actualización realizada en la tabla EVENT también se realiza en la tabla PAST_EVENT. Son "duplicados".
  2. La tabla EVENT se escribe y se lee con mucha frecuencia.
  3. La tabla PAST_EVENT se lee con mucha frecuencia.
  4. Cuando finaliza un evento en la tabla EVENT, se elimina de la tabla EVENT. Por lo tanto, cada evento creado eventualmente solo existirá en la tabla PAST_EVENT.

Decidí tener un duplicado de información en la tabla EVENT en la tabla PAST_EVENT porque mi aplicación está buscando datos sobre eventos actuales y en curso (solo necesita leer de la tabla EVENT), O está buscando eventos que han terminado (solo necesita leer de la tabla PAST_EVENT). Pero nunca ambos. Mi razón es que hacer consultas SQL en un subconjunto de eventos es más rápido que la alternativa .

Alternativa:

¿Qué pasa si, en cambio, consolido ambas tablas en una tabla llamada EVENTO? Luego agregaría un campo booleano indexado en la base de datos, "hasEnded", para consultar eventos en curso o finalizados.

¿Cuál de las estrategias antes mencionadas es más eficaz?

Más información (actualización):

  1. Muchos EVENTOS se crean cada día. Simultáneamente, muchas filas de EVENTOS se eliminan diariamente porque han finalizado. Los eventos se eliminan de la tabla EVENT mediante un trabajo cronológico que se ejecuta cada 12 horas y elimina los eventos que han finalizado.
  2. Una fila de EVENTOS no genera muchos PAST_EVENT. Solo uno (que se mantendrá como una réplica exacta del estado actual de su correspondiente fila de EVENTOS).
  3. Las claves primarias son auto-inc. Además, cuando se crea un EVENTO, se crea un PAST_EVENT con la misma identificación de clave principal para mi satisfacción personal.
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

"Ridículo" es la palabra que me viene a la mente. En interés de alguna definición de "eficiencia", desea duplicar los datos y cada modificación a los datos. Eso simplemente no me parece eficiente en absoluto.

Comenzaría con eliminaciones suaves: simplemente una bandera sobre si el evento se elimina o no. Eso hace un buen trabajo al definir los eventos.

Debido a que los dos modos que necesita son todos o solo los que no se eliminan, puede pensar en optimizar el almacenamiento si es necesario. Una opción, si su base de datos los admite, es un índice agrupado en el indicador de eliminación. Por lo general, no se recomienda dicha agrupación en una bandera binaria. Pero si los datos no eliminados son pequeños, puede ser una ventaja para las consultas que buscan eso.

Otra alternativa es utilizar particiones. Algunas bases de datos no le permiten cambiar la clave de partición, lo que representa un desafío.

Finalmente, también podría tener un activador de delete en la tabla de events que cargaría los eventos eliminados en otra tabla. Las consultas sobre todos los eventos requerirían unirlos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda