2013-09-07 4 views
1

DB conception 1: Il y a 1 tableQuelle base de données est la plus efficace dans ce scénario?

 

    Create Table (id int primary key, name varchar(20), description varchar(10000)); 

DB conception 2: Il y a 2 tables

 

     Create Table1 (id int primary key, name varchar(20)); 
     Create Table2 (id int primary key, description varchar(10000)); 

Remarque: chaque identifiant doit avoir une description qui lui est associée. Nous n'interroge pas la description si souvent comme nom.

Dans la conception 1, 1 requête simple peut obtenir le nom & description, pas besoin de joindre, mais si nous avons 1 million d'enregistrements, alors ce sera lent? Dans la conception 2, nous avons besoin de rejoindre donc la base de données a besoin de recherche & id correspondant -> cela pourrait être lent, mais nous ne demandons pas la description souvent, donc il sera lent pour tout le temps pas tout le temps.

Alors, quelle est la meilleure conception dans ce scénario?

+0

Ceci n'est pas responsable. La seule façon de le savoir est de mesurer les performances en utilisant votre jeu de données _your_ et les modèles d'accès. La réponse dépendra beaucoup de facteurs tels que la bande passante d'E/S, la vitesse du processeur, la mémoire, la vitesse du disque, etc. Vous n'avez même pas indiqué quelle base de données vous utiliserez et il n'y a pas de réponse invariante à cette question. –

+0

J'utilise MySQL – Kiti

+0

Cela ne change pas le fait que ma réponse pour mes données et modèle d'accès sera probablement différent du vôtre. Vous allez devoir essayer tous les deux avec des données du monde réel (_votre_ monde réel) pour décider. Personne ici ne peut vous dire lequel est le meilleur. –

Répondre

2

Cela s'appelle vertical partitioning ou "division des rangs" et ce n'est pas une balle d'argent (rien n'est). Vous n'obtenez pas de «meilleures performances», vous obtenez simplement des «performances différentes». Si un ensemble de caractéristiques de performance est meilleur que l'autre est une question de compromis d'ingénierie et varie d'un cas à l'autre.

Dans votre cas, 1 million de lignes s'ajustera confortablement dans le cache de SGBD sur le matériel d'aujourd'hui, produisant d'excellentes performances. Donc, à moins que certains des other reasons s'appliquent, restez simple, dans une seule table. Et si ses 1 milliard de lignes (ou 1 trillion ou n'importe quel nombre est trop grand pour les standards de la mémoire du jour), gardez à l'esprit que si vous avez indexed your data correctly, la performance restera excellente longtemps après qu'elle est devenue plus grande que la cache

seulement dans le plus extrême des cas vous devez diviser verticalement la table pour des raisons de performance - dans ce cas, vous devrez mesure dans votre propre environnement avec vos propres modèles d'accès, et déterminer si cela apporte un avantage de performance du tout; et est-il assez grand pour compenser l'augmentation de l'assemblage.

+0

thax vous, c'est toute l'information dont j'ai besoin – Kiti

+0

Ou en d'autres termes: avec les instructions CREATE ci-dessus, tant que vous continuez à interroger _only_ sur la PRIMARY KEY, ça devrait aller. – DanMan

0

C'est une sur-optimisation pour 1 million d'enregistrements selon moi. Ce n'est vraiment pas beaucoup. Vous pouvez essayer de tester la performance réelle en générant des données factices sur environ un million de lignes pour une base de données factice et l'interroger. Vous verrez comment ça fonctionne.

+0

ce que près de 100 millions de disques, aussi nous n'interroge pas le « description » comme si souvent que le « nom » – Kiti

+0

À un certain moment, vous devez tester vous-même pour mesurer la performance. Il y a une grande différence entre les lignes 1M et 100M. De plus, ce qui est "trop ​​long" est subjectif. Vous savez mieux ce qui va prendre trop de temps.Votre meilleur pari est de générer des données factices (mais avec des propriétés similaires) et d'essayer un tas de requêtes possibles et de chronométrer leurs performances. Il n'y a pas de réponse 'un' ici. – ApplePie

Questions connexes