Cita: Hombre, lo veo justo al revés, se hace esa tabla "cutre" precisamente si se va a consultar muchas veces, por ahorrar tiempo y recursos.
Por cosas del funcionamiento del hardware y el sistema operativo, en realidad leer 10.000 registros y leer un sólo registro usan en la mayoría de los casos la misma cantidad de tiempo. Es más el tiempo que necesita para cambiar de procesos, acceder al disco y desplazar el cabezal de lectoescritura, que lo que le lleva leer un bloque de datos. En ese sentido, lara el sistema, leer uno o 10000 no importa.
Además piensa esto: Un motor de base de datos no lee un registro. Lee un bloque de datos que ocupa 64 Kb, a donde pone los registros leídos; si el registro en cuestión usa 4 bytes (BIGINT), esto quiere decir que como mínimo realizará una lectura que ocupará 16.000 registros de una sola vez... aunque solamente esté leyendo uno. En ese sentido no le ahorras al sistema ni tiempo ni espacio.
El cruce de datos de dos tablas que contengan 500 registros de 4 bytes usa tres bloques de datos. Nada más. En ese contexto, hacer una relación entre dos tablas que contengan entradas y salidas de un parking de 1.000 plazas, o bien de un edificio de oficinas de 12.000 empleados, ocupan el mismo espacio a nivel de bloques de datos y a nivel de procesos, por lo que en realidad se trata de tiempos despreciables. Son tan pequeños que el parser no pierde el tiempo en optimizarlos porque le llevaría más recursos.
En el caso del uso de los índices, aclaremos: Cuando MySQL se encuentras que la información está en los índices, ni mira las tablas, por lo que a veces las consultas resultan mucho más rápidas de lo esperado, por más largas que sean las tablas.
En este punto depende del tipo de índices. Los índices BTree son inmensamente rápidos porque se recorren con extrema rapidez, y los Hash trabajan casi como con la ALU de los microporcesadores, por lo cual también son muy rápidos.. Piensa, además, que los índices son más pequeños que las tablas, por lo que en un bloque de datos de 64 Kb entran más punteros de índice que registros en la tabla en el mismo espacio.
Cita: igual ya puestos la haríamos de otra forma para dotarle de más funcionalidad, como indicando los que han entrado y salido y las horas, como has dicho, pero eso, ¿no sería darle una funcionalidad adicional a la inicial, que era simplemente el grado de ocupación? Y sobre todo, ¿no podría ser que una consulta a la tabla inicial consumiera tanto tiempo que lo desaconsejara?
No necesariamente. Cuando analizas el problema a nivel de consultas los factores de optimización implicados pueden ser muchos, y en muchos de esos casos no se está leyendo la tabla completa. Por dar un ejemplo: Buscar un registro en 10.000.000 puede requerir menos de 25 lecturas de índice, o incluso la lectura de un sólo bloque de datos.
A nivel de procesos de BB.DD. las cosas no son sumatorias de 1+1...