Existe-t-il une technique/des conseils afin d'optimiser les performances des requêtes ci-dessous?
Selon mes besoins, ma taille de dB moyenne sera d'environ 30 milles. rangées par jour, donc chaque seconde de moins, fera une énorme différence.
Mon moteur DB est innoDb et j'utilise 1 processeur central, avec 2 Go de RAM.
Temps d'exécution: 7,5 sections (5,5 mil. Lignes
SELECT vpn_group, username, from_interface_addr_ip
FROM SystemEventsR
WHERE (timestamp > ( NOW( ) - INTERVAL 10 MINUTE ) AND
SysLogTagflag=1 AND
username !='')
GROUP BY username
Temps d'exécution: 88,4 sec (5,7 mil. Lignes
SELECT syslogtagid, DeviceReportedTime, class, definition, SystemEventsR.SysLogTag,
COUNT(id) AS Records,
explanation, action
FROM SystemEventsR,oa_syslogtags
WHERE (SystemEventsR.SysLogTag = oa_syslogtags.syslogtag AND
flagid = 1 AND DATE(timestamp) = DATE(NOW()))
GROUP BY SystemEventsR.SysLogTag
ORDER BY Records DESC
Toute aide serait appréciée.
Vos demandes ne sont que sur les dernières données. Vous pouvez essayer un partitionnement horizontal. Il est pris en charge dans MySQL 5.1 .
Une autre façon est de maintenir une "partition horizontale" manuellement. Par exemple, vous pouvez créer une table "SystemeventsR_Archive" et exécuter des requêtes ci-dessous tous les jours.
REPLACE INTO SystemEventsR_archive SELECT * FROM SystemEventsR;
DELETE FROM SystemEventsR WHERE timestamp < ( NOW() - INTERVAL 1 DAY );