Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

139
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!