2010-09-14 8 views
0

Nous avons une base de données avec beaucoup d'informations sur les personnes. Je ne vais pas poster toute la structure de base de données, car il est trop grand, mais il ressemble à quelque chose comme ceci:Recherche dans plusieurs tables en utilisant MS SQL Server 2000


Personne
ID
Nom
Rue
Ville
État
Pays

Langue
langCode
Langue

Intérêts
ID
LastChangedBy
LastChangedOn

LocalizedInterest
InterestID
langCode
Description de

PersonInterest
personID
InterestID


Maintenant, ceci est juste un petit exemple. Dans notre base de données, nous avons environ 8-9 tables localisées (comme l'intérêt) une personne peut être liée à. Une personne peut avoir plusieurs intérêts, une personne peut avoir plusieurs emplois, une personne peut avoir plusieurs formations, une personne peut avoir plusieurs expériences, ...

Je dois créer une fonction de recherche. Disons que vous entrez "tom" comme terme de recherche. Cela devrait donner une liste de toutes les personnes avec "tom" dans leur nom, rue, ville, état, pays, dans un de leurs intérêts, dans un de leurs emplois, dans une de leurs études, dans une de leurs expériences ou dans un des autres tables liées. Si vous entrez plusieurs mots à rechercher (par exemple "tom php"), il devrait donner une liste de toutes les personnes avec "tom" dans leur nom, rue, ville, état, pays, dans l'un de leurs intérêts , dans l'un de leurs Jobs, dans une de leurs Educations, dans une de leurs Expériences ou dans l'une des autres tables liées ET "php" dans leur Nom, Rue, Ville, Etat, Pays, dans un de leurs Intérêts, dans l'un de leurs emplois, dans l'une de leurs études, dans l'une de leurs expériences ou dans l'une des autres tables liées.

À l'heure actuelle, il y a environ 4 500 enregistrements dans la table de personne et si je fais une jointure externe de la personne avec toutes les tables que je dois rechercher, il y a environ 1.300.000 dossiers et 40-50 champs pour effectuer la recherche.

Comment dois-je aborder ce problème pour que la performance soit acceptable? Le client s'attend à "quelque chose comme Google" en termes de rapidité et de facilité d'utilisation.

Nous utilisons MS SQL Server 2000 et ASP.NET 2.0. La fonctionnalité de recherche doit être ajoutée à une application existante et la modification de la structure de la technologie ou de la base de données n'est pas une option.

+0

ressemble à un cas pour une vue indexée, recherché par un proc stocké. est d'ajouter une vue indexée une "option"? vous n'êtes pas vraiment en train de changer la structure. – RPM1984

+0

Je pense que nous devrions utiliser des jointures externes pour construire cette vue (une personne doit encore être trouvée quand il n'a pas de Jobs ou d'Intérêts) et vous ne pouvez pas mettre un index sur une vue avec des jointures externes. –

Répondre

1

Vous pouvez implémenter la recherche de texte intégral dans les tables/champs concernés, puis créer une requête basée sur celle-ci. Vous pouvez trouver des informations rapides here.

+0

Merci. Nous allons essayer cela. –

+0

Notre base de données fonctionne sur un serveur partagé. Nous ne pouvons malheureusement pas utiliser l'indexation en texte intégral. –