J'ai deux tables: urls (table avec pages indexées, hôte colonne indexée, 30 millions de lignes) hôtes (tableau avec des informations sur les hôtes, l'hôte est colonne indexée, 1mln lignes)Comment gérer les jointures entre des tables énormes dans PostgreSQL?
L'un des plus fréquents SELECT dans mon application est:
SELECT urls.* FROM urls
JOIN hosts ON urls.host = hosts.host
WHERE urls.projects_id = ?
AND hosts.is_spam IS NULL
ORDER by urls.id DESC, LIMIT ?
dans les projets qui ont plus de 100 000 lignes dans le tableau urls la requête exécute très lentement.
Étant donné que les tables ont grandi, l'exécution de la requête est plus lente et plus lente. J'ai beaucoup lu sur les bases de données NoSQL (comme MongoDB) qui sont conçues pour gérer de si grandes tables mais changer ma base de données de PgSQL en MongoDB est pour moi un gros problème. En ce moment je voudrais essayer d'optimiser la solution PgSQL. Avez-vous des conseils pour? Que devrais-je faire?
100k lignes n'est vraiment pas "énorme" du tout. –
quels index avez-vous? – HLGEM
Veuillez exécuter 'explain analyze' sur un échantillon de votre requête et ajouter le résultat à votre question, ainsi que la liste des index que vous avez dans les tables' hosts' et 'urls'.100k lignes est certainement quelque chose que pg devrait être capable de gérer sans trop de problème à moins qu'il ne soit vraiment affamé de ressources. – Lepidosteus