Verständnisfrage DB Query

mastermannrw

Mitglied
Ich hab da mal eine klitze kleine Definitionsfrage.
Eine Connection zu einer Datenbank wird bei einem Query aufgebaut. Diese verbindung bleibt bestehen. Wenn ich jetzt mit mysql_fetch_array oder ähnliches die Datensätze abfrage, sind das dann immer neue Queries bzw. Verbindungen? Macht sich eine solche Abfrage auf die Performace des DB Servers bemerkbar?
Und gibt es Datenbankgrößen, die einen Server in die Knie zwingen? Ich spreche hier auf Server btw. Webspace an, der dies her gibt. Keine Hochleistungsserver bei Firmen.

Ich vermute, das es jemanden gelungen ist, eine Abfrage nach dem Motto SELECT * FROM irgendwas zu machen und dannach mittels if ...then zu schauen, ob er das Ergebniss braucht.
 
mysql_query("Select * FROM blabla")

das ist eine Anfrage alles andere sagt dann, in welcher Form es ausgegeben werden soll.

Die Performance einer DB wirst du mit einem Webspace angebot wohl kaum in die Knie zwingen können. Die derzeitigen Beschränkungen von DB liegen eigentlich weit entfernt von der GigaByte grenze und somit wohl kaum relevant. Dass einzige was dann halt nen bisle länger dauert ist die Anfrage auf die DB wenn die DB so 2 GB groß ist, aber dass kann man mit gezielten Fragestellungen nen bischen bremsen.

Wenn man zb nur den Namen aus einer Tabelle braucht, dann muss man halt net SELECT * FROM sondern einfach nur SELECT name FROM nehmen, und somit kann man das nen bisle verkleinern, und der intere Traffic wird net all zu groß

Also immer nur dass aus ner DB anfragen, wass man wirklich braucht.
 
Wenn ich die Anfrage schicke, wird doch auf dem Server eine Ergebnistabelle erzeugt. Und wenn ich dann hin gehe und die Daten Datensatz für datensatz aus der Ergebnistabelle raus hohle, ist das doch sicherlich langsamer, als wenn ich von vorn herein hin gehe und sage, gib mir nur die Datensätze, die ich brauche oder? Wäre für mich zumindest logisch.
 
Dem ist zwar so, und laut mysql.com sollte man auch wenn man (fast) alle Spalten einer Tabelle abfragen will nicht SELECT * sondern SELECT gefolgt von den Spalten nutzen, da der mysql-Server dann wohl das Query nochmals optimieren kann, aber trotz allem gilt wohl der folgende Grundsatz. Du wirst bei 99,8% der Anwendungen die üblicherweise auf einem Webhosting Paket durchgeführt werden und übehraupt durchgeführt werden können, keine fühlbaren Performance Unterschiede vorfinden. Da müsste es sich jetzt schon um Tabellen handeln die nebeneinander 400-1000 Spalten vom Typ BLOB haben, damit das irgendwie "spürbar" wird.
 
Also mit Indizies kann man die Performance erhöhen!
Ich habe ien db mit 4 Tabellen
in der "grössten" Tabelle (ca. 40.000.000 DS)
ist eine Query mit Index bedeutend schneller als ohne
da braucht es keine hunderte Spalten.
Aber wie du schon richtig gesagt hast:
Die Abfrage so gestalten, daß man seine gewünschten (und NUR die) Informationen erhält.
Code:
Also SELECT * FROM [TABLE]
WHERE [BEDINGUNG]

ist nicht sonderlich schnell,
Besser mehrere Indizies anlegen....
Code:
SELECT [DB].[FELD],[DB].[FELD] ---> (indiziert)
FROM [DB].[TABLE]
WHERE [Bedingung]


Jedenfalls sind das meine Erkenntnisse...
 
Aufgrund meiner Erfahrung muss ich sagen, dass ich mit den obengenannten Aussagen nicht einverstanden bin:

Im Rahmen eines Tests habsch mal auf einem Webspace in ne Tabelle eines mysql Servers ca. 200'000 Records reingeladen und dann ne Abfrage gestartet. Mag mich leider nicht mehr erinnern was für eine, sorry.

Auf jeden Fall war der Server ab sofort praktisch nicht mehr erreichbar - ich hab's grad' noch geschafft (nach 15 Minuten) nen DROP TABLE ... durchzuführen, was bewirkte, dass der Server wieder performant erreichbar war.
Natürlich ist diese/meine Aussage nicht repräsentativ, logischerweise habe ich auf eine Wiederholung der oben beschriebenen Prozedur gerne verzichtet. ;-)

Wie ich in Erfahrung bringen konnte, hatte der Server jedoch mind. 50 Sites gehosted und verfügte bloss über 256 Megs RAM - naja.

Bei grossen Datenmengen ist die Verwendung von Indexen sicherlich Pflicht. Wenn man Einfluss auf die Konfiguration des RDBMS hat, dann sollte man den Key-Cache auf eine Grösse einrichten, dass die Schlüssel im Memory gehalten werden können. Bei einem VirtualHosting Angebot für grad mal ein paar €, ist dies aber unrealistisch (wenn die Tabellen eine gewisse Grösse haben).

Die Konsequenz ist, dass auf die Disk zugegriffen werden muss - naja, wenn die Tabelle nur 10 Megs gross ist, dann dauert der Zugriff inkl Lesevorgang nur nen Bruchteil einer Sekunde - aber bei wirklich grossen Datenmengen und/oder häufigen Anfragen reicht dies nicht mehr aus. Oh ja, und dann sind da noch diese anderen 50 störenden Sites die auf dem gleichen Hardwareserver gehosted werden. :)

Cu all
Oli
 
Zurück