Estoy trabajando en el diseño de una gran base de datos. En mi aplicación tendré muchas filas, por ejemplo, actualmente tengo una tabla con 4 millones de registros. La mayoría de mis consultas utilizan la cláusula datetime para seleccionar datos. ¿Es una buena idea indexar campos de fecha y hora en la base de datos mysql?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
Estoy tratando de mantener mi base de datos funcionando bien y las consultas se ejecutan sin problemas
Además, ¿qué idea crees que debería tener para crear una base de datos de alta eficiencia?
field 20
?Respuestas:
MySQL recomienda el uso de índices por varias razones, incluida la eliminación de filas entre condiciones: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Esto hace que su columna de fecha y hora sea un excelente candidato para un índice si lo va a usar en condiciones con frecuencia en consultas. Si su única condición es
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
y no tiene otro índice en la condición, MySQL tendrá que hacer un escaneo completo de la tabla en cada consulta. No estoy seguro de cuántas filas se generan en 30 días, pero siempre que sea menos de aproximadamente 1/3 de las filas totales, será más eficiente usar un índice en la columna.Su pregunta sobre la creación de una base de datos eficiente es muy amplia. Diría que solo asegúrese de que esté normalizado y que todas las columnas apropiadas estén indexadas (es decir, las que se usan en uniones y cláusulas where).
fuente
SELECT
consulta sea más rápida aunque indexé ladate time
columna. .. índice hace que la consulta sea rápida cuando uso laequal
operación. ¿Estoy en lo cierto?Aquí el autor realizó pruebas que mostraron que la marca de tiempo de unix entero es mejor que DateTime. Tenga en cuenta que usó MySql. Pero creo que no importa qué motor de base de datos use, los enteros de comparación son un poco más rápidos que las fechas de comparación, por lo que int index es mejor que DateTime index. Tómese T1 - tiempo de comparar 2 fechas, T2 - tiempo de comparar 2 enteros. La búsqueda en el campo indexado toma aproximadamente O (log (filas)) tiempo porque el índice se basa en un árbol equilibrado; puede ser diferente para diferentes motores de base de datos, pero de todos modos el registro (filas) es una estimación común. (si no utiliza la máscara de bits o el índice basado en r-tree). Entonces, la diferencia es (T2-T1) * Registro (filas): puede desempeñar un papel si realiza su consulta con frecuencia.
fuente