Bonjour, je construit une base de donnée pour un nouveau projet.
Ayant déjà été sujet à une base de donnée mal optimisée sur un gros projet qui amène à beaucoup de problèmes, je souhaite partir ici d'un bon pied. Je m'adresse ainsi à votre expertise aussi bien pour la structure que pour le moteur (innodb ou mysisam).
- 1ER POINT : Je met en place une base de donnée qui sera très peu mise à jour (UPDATE, INSERT, DELETE), mais très souvent lue (SELECT).
- 2EM POINT : j'ai besoin de stocker tout un ensemble de données à une url/exression(par exemple "mondomaine.com"/"monexpression") pour faire des satistiques dans le temps.
- 3EM POINT pour faire ces statistiques je dois figer pour une date, un lien, et une expression les données en question.
par exemple
- Le 11 décembre "mondomaine.com" pour "monexpression" à la colonne A qui vaut 5
- Le 12 décembre "mondomaine.com" pour "monexpression" à la colonne A qui vaut 6
- Le 13 décembre "mondomaine.com" pour "monexpression" à la colonne A qui vaut 10
- 4EM POINT : Les champs URL et expressions ne changent jamais.
Ainsi deux schémas me viennent à l'esprit :
SCHEMA 1
SCHEMA 2
Dans le schéma 1 j'aurai besoin d'une double jointure :
SELECT ... FROM statistics_web
JOIN site_web ON statistics_web.site_web_id_site=site_web.id_site
JOIN expression ON statistics_web.expression_id_expression=expression.id_expression
WHERE
expression.expression="monexpression"
AND site_web.url="monurl"
AND statistics_web.date>"...."
AND statistics_web.date<"...."
Vous savez sûrement aussi bien que moi, que ce schéma me permet de modifier facilement une url et une expression sur l'ensemble de la base.
Cependant je n'ai pas besoin de modifier cette url et expression, elles restent figées pour toujours. Ma question sur ce schéma est : est-ce que le fait de faire des jointures est performant et suffisament performant pour se justifier ? Peut être segmenter le tout en 3 requetes ? (une pour récuperer l'id de l'url, une pour récupérer l'id de l'expression, et la derniere pour récupérer mes données ?)
Dans le schéma 2 j'aurai seulement besoin d'effectuer un where, mais sur une grosse base textuelle, et là la grosse question : est ce que quand ma base comptera 100 000, 500 000, 1 000 000 d'entrée, la recherche texte sera toujours aussi performante ?
SELECT ... FROM statistics_web
WHERE
expression="monexpression"
AND url="monurl"
AND date>"...."
AND date<"...."
Mes connaissances en sql étant limitées à celles d'un développeur en soif d'en savoir plus, je n'arrive pas à peser le pour et le contre de chacun des schémas, ni du moteur adéquate.
Toute remarque étant la bievenue.
Partager