J'ai 2 bases de données et j'ai besoin de lier des informations entre deux grandes tables (plus de 3M entrées chacune, en croissance continue). La 1ère base de données possède une table 'pages' qui stocke diverses informations sur les pages web, et inclut l'URL de chacune. La colonne 'URL' est un varchar (512) et n'a pas d'index.Mysql InnoDB optimisation des performances et indexation
La 2ème base de données a une table 'urlHops' définie comme:
CREATE TABLE urlHops
( dest
varchar (512) NOT NULL, src
varchar (512) NULL DEFAULT, horodatage timestamp
NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY dest_key
(dest
), KEY src_key
(src
) ) MOTEUR = InnoDB DEFAULT CHARSET = latin1
Maintenant, j'ai besoin de lancer des requêtes (efficacement) comme ceci: sélectionnez p.id, p.URL de db1.pages p, db2.urlHops u où u.src = p.URL et u.dest =? Dans un premier temps, j'ai pensé à ajouter un index sur les pages (URL). Mais c'est une colonne très longue, et je publie déjà beaucoup de INSERTs et UPDATEs sur la même table (bien plus que le nombre de SELECT que je ferais en utilisant cet index).
D'autres solutions possibles que je pensais être: -adding une colonne aux pages, en stockant le hachage md5 de l'URL et en l'indexant; De cette façon, je pourrais faire des requêtes en utilisant le md5 de l'URL, avec l'avantage d'un index sur une colonne plus petite. : ajoute une autre table contenant uniquement l'ID de la page et l'URL de la page, indexant les deux colonnes. Mais c'est peut-être un gaspillage d'espace, n'ayant que l'avantage de ne pas ralentir les insertions et mises à jour que j'exécute sur les 'pages'.
Je ne veux pas ralentir les insertions et les mises à jour, mais en même temps je serais capable de faire les requêtes sur l'URL efficacement. Aucun conseil? Ma principale préoccupation est la performance; Si nécessaire, gaspiller de l'espace disque n'est pas un problème.
Merci, ce qui
Davide
@Gary: J'ai essayé de le faire avant, mais urlHops est une table sur laquelle j'insère des données à très haute vitesse, donc je ne peux pas la diviser en deux (je dois essentiellement y ajouter des couples de src et dest URL). Si je le divise comme ça, alors les inserts sur lui ralentissent trop pour mes besoins. –