2017-02-28 4 views
0

Zum Beispiel habe ich eine "NAMES" Tabelle, die eine einzige Name Spalte des Typs varchar(10) hat; Diese Tabelle hat 500 Zeilen. Ich habe auch eine "NAME_COLLECTIONS" -Tabelle mit einer Spalte vom Typ longtext; In der einzelnen Zeile der Tabelle enthält diese Spalte eine Zeichenfolge der Länge 5500.Was ist schneller - Abrufen einer Spalte aus n Spalten mit einem einzelnen Wert der Größe t, oder Abrufen von es aus 1 Spalte, aber der Größe n * t?

Wird SELECT * FROM NAMES WHERE :Name = 'Tom'; langsamer ausgeführt als SELECT * FROM NAME_COLLECTIONS;?

Wie wirkt sich die Erhöhung der Anzahl der Spalten in NAMES gegenüber der Erhöhung der Größe des einzelnen Textes in NAME_COLLECTIONS auf die Leistung aus?

+0

Ich bin geneigt zu erraten, dass bei sonst gleichen Bedingungen die Aufteilung der Daten über mehrere Zeilen würde ein bisschen mehr Overhead für das DBMS in einem vollständigen Tabellenscan, aber selten ist alles andere gleich. Das ist ohnehin eine weitgehend leere Frage - eine sinnvolle Anwendung, in der beide vorgeschlagenen Darstellungen der Daten semantisch gleichermaßen angemessen sind, ist schwer vorstellbar. –

Antwort

0
SELECT * FROM NAMES WHERE Name = 'Tom'; 

Dies sollte schneller sein, Sie auf die Spalte einen Index unter der Annahme (die Sie sollten, da Sie eine optimale Leistung zu versuchen, scheinen zu bekommen). Es muss nur eine einzelne Zeile aus dem Index gelesen werden, und die Zeile belegt eine einzelne Seite mit Daten.

Während sich ein über mehrere Datenseiten erstrecken kann, wird jeder Lesevorgang in Ihrer Namensliste gezwungen, die gesamte Sammlung zu lesen.

Ich empfehle Ihnen, Ihre Daten ordnungsgemäß zu modellieren, mit einer Zeile pro Name, wenn Sie nach einem bestimmten Namen suchen möchten. Und erstellen Sie einen Index für diese Spalte.

Obwohl 500 Zeilen für MySQL unbedeutend ist. Es wird wahrscheinlich trotzdem auf ein paar Seiten im Pufferpool im Speicher passen, so dass Sie sich nicht um die Leistung kümmern sollten, bis Sie einen größeren Datensatz erhalten.

Übrigens ist Ihre Syntax WHERE :Name = 'Tom' nicht richtig. Der mit dem Doppelpunkt vorangestellte Spaltenname scheint ein benannter Parameter-Platzhalter zu sein, kein Spaltenname. Ein Parameterplatzhalter kann nur eine feste Zeichenfolge und nicht der Name einer Spalte sein.

+0

Entschuldigung, ich wollte schreiben Name =: Name; Es ist spät und ich bin müde. Trotzdem danke für die Antwort! –

Verwandte Themen