Portal > Foren > PHP > PHP-Programmierung > performanceprobleme wegen zu großer datenbank?
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 20.06.2006, 02:11 Nach oben    #21
Neuer Benutzer
 
Registriert seit: 19.06.2006
Beiträge: 14
Standard

Und im PHP-Code wo sich also die Abfrage dann befindet muss nichts geändert werden?

EDIT:
Das Feld in dem die Namen stehen an wen der Eintrag gerichtet ist hat jetzt einen Index. Typ: INDEX...

Außerdem hat das Feld ID noch einen Index... Typ: PRIMARY...

Bringt jedoch immernoch nichts... Es lädt genauso langsam wie auch zuvor..

Geändert von *the_rob* (20.06.2006 um 03:05 Uhr)
*the_rob* ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 03:14 Nach oben    #22
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Zitat:
Zitat von Lars
sql Code:
  1. `content` LIKE '%suchwort%'
  2. ;
wäre es sinnvoll, einen Index auf die Spalte "content"
Leider daneben, denn auf Indizes können nur head-matches gemacht werden.

LIKE 'suchwort%' ginge, aber für Volltextsuchen braucht man nen Volltext-Index.

PS: Fürs Gästebuch sehe ich spontan Bedarf für einen Multi-Column-Index auf `an` und `id`. Einzelne Indizes bringen bei MySQL hier nichts.
Dann macht man mal ein EXPLAIN auf die SQL-Queries des Gästebuches, und wenn brav überall der Index verwendet wird und nirgendwo "ALL" steht ist das meiste gut.
Waq ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 03:27 Nach oben    #23
Neuer Benutzer
 
Registriert seit: 19.06.2006
Beiträge: 14
Standard

Wie erstelle ich einen Multi-Column-Index?
Ich kann in meinem MySQLAdmin folgende Typen auswählen:
INDEX
UNIQUE
FULLTEXT

Bin ich hier auf dem falschen Weg?

Sorry aber wie gesagt habe ich einfach keine Ahnung denn ich habe mit Indizes noch nicht gearbeitet...
*the_rob* ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 03:30 Nach oben    #24
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

http://www.google.de/search?hl=de&ie...mn+index+mysql
Waq ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 08:48 Nach oben    #25
Jay
Gast
 
Beiträge: n/a
Standard

Du hast 7 Bedingunge in diesem kleinen Codeabschnitt. Bedingungen brauchen sehr sehr lange, deshalb solltest du dir evtl deinen Quellcode überdenken. Außerdem kann ein Cache Wunder bewirken. Es reicht ein simpler in PHP geschriebener Filecache, allerdings wäre natürlich der APC Cache perfekt. Damit kannst du nämlich zB auch Konfigurationsvariablen cachen.
Falls du CAPTCHAS generierst, solltest du vielleich ein paar tausend erstellen und nach Zufall ausgeben anstatt jedes mal ein neues Image zu generieren.
...

Poste mal einen Link oder erzähl mal was so alles auf der Seite ist.

MfG Jay
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 09:08 Nach oben    #26
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Leider daneben, denn auf Indizes können nur head-matches gemacht werden.

LIKE 'suchwort%' ginge, aber für Volltextsuchen braucht man nen Volltext-Index.
Ah, danke. So kann auch ich mein Wissen auffüllen
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 13:07 Nach oben    #27
Neuer Benutzer
 
Registriert seit: 19.06.2006
Beiträge: 14
Standard

Zitat:
Zitat von Jay
Du hast 7 Bedingunge in diesem kleinen Codeabschnitt. Bedingungen brauchen sehr sehr lange, deshalb solltest du dir evtl deinen Quellcode überdenken. Außerdem kann ein Cache Wunder bewirken. Es reicht ein simpler in PHP geschriebener Filecache, allerdings wäre natürlich der APC Cache perfekt. Damit kannst du nämlich zB auch Konfigurationsvariablen cachen.
Falls du CAPTCHAS generierst, solltest du vielleich ein paar tausend erstellen und nach Zufall ausgeben anstatt jedes mal ein neues Image zu generieren.
...

Poste mal einen Link oder erzähl mal was so alles auf der Seite ist.

MfG Jay
Die Website ist unter der URL http://www.nb-treff.com zu erreichen...
Das was du sagst hört sich sehr gut an... Allerdings hab ich keine Ahnung das umzusetzen...
Wärst du so freundlich und könntest mit mir vielleicher per ICQ kontakt aufnehmen?
Ich bin echt am verzweifeln...
*the_rob* ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 18:05 Nach oben    #28
axo
Gast
 
Beiträge: n/a
Standard

führ doch mal bitte
Code:
SHOW CREATE TABLE gbeintraege;
in phpmyadmin aus und poste das ergebnis hier.

selbst bei hundert millionen einträgen und hunderten von gleichzeitigen verbindungen kommt mysql normalerweise nicht mal ins schwitzen. es sind die besch*ssen gesetzten indexe und der stümperhafte code eindeutig schuld.

grüße
axo
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 18:46 Nach oben    #29
Jay
Gast
 
Beiträge: n/a
Standard

Zitat:
Wärst du so freundlich und könntest mit mir vielleicher per ICQ kontakt aufnehmen?
Nein

PHP-Code:
$db->query("SELECT * FROM `gbeintraege` WHERE `an`='" addslashes($username) . "' ORDER BY `id` DESC");
$Gesamt=$db->num_rows(); 
Du selektierst hier alle Eintrag damit du weißt wieviele es in der DB gibt?
SELECT COUNT (*) ... wäre wesentlich schneller. Ich meine du selektierst alle und lässt sie dann zählen. Es ist wesentlich schneller alle zu zählen und die Daten in der DB zu lasssen.
Wenn du die Einträge im GB nie löscht könntest du auch MAX (primaryKeyId) verwenden. Somit bekommst du auch die Anzahl. Das ist schneller als COUNT funktioniert aber nur wenn keine Einträge gelöscht werden.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 19:21 Nach oben    #30
Neuer Benutzer
 
Registriert seit: 19.06.2006
Beiträge: 14
Standard

Zitat:
Zitat von axo
führ doch mal bitte
Code:
SHOW CREATE TABLE gbeintraege;
in phpmyadmin aus und poste das ergebnis hier.


CREATE TABLE `gbeintraege` (\n `ID` int(11) NOT NULL auto_increment,\n `an` varchar(100) NOT NULL default '',\n `name` varchar(100) NOT NULL,\n `eintrag` text NOT NULL,\n `date` varchar(50) NOT NULL,\n `fontcolor` varchar(7) NOT NULL,\n PRIMARY KEY (`ID`),\n KEY `an` (`an`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1
*the_rob* ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.06.2006, 20:14 Nach oben    #31
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Und es fehlt immer noch der Multi-Column-Index...
Waq ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.06.2006, 17:02 Nach oben    #32
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 540
Standard

Zitat:
Zitat von Jay
SELECT COUNT (*) ... wäre wesentlich schneller. Ich meine du selektierst alle und lässt sie dann zählen. Es ist wesentlich schneller alle zu zählen und die Daten in der DB zu lasssen.
Wenn du die Einträge im GB nie löscht könntest du auch MAX (primaryKeyId) verwenden. Somit bekommst du auch die Anzahl. Das ist schneller als COUNT funktioniert aber nur wenn keine Einträge gelöscht werden.
MAX bringt hier wohl nix, da nur alle einträge, die an einen user gesendet worden sind, gezählt werden sollen. sonst hätte ja jeder 700.000 gb einträge...

aber selbst bei den 1000 beiträgen die manche leute drinne haben, würde ich mir doch mal überlegen, ob die nicht irgendwann ma gelöscht werden. die braucht vermutlich doch eh keiner mehr.

als optimierung der db könntest du die tabelle auch von namen-bezeichner auf ids (foreign key) umstellen, so dass du eine extra tabelle mit allen benutzern hast (die ja vermutlich eh schon existiert) und die db tabelle enthält dann nur noch eine eintrag-id, eine sender-id und eine empfänger-id sowie den inhalt.
dadurch wird die tabelle kleiner, schneller zu durchsuchen und unnötige redundanz wird vermieden.

btw: hab mir grad mal deine page angeguckt und im öffentlichen guestbook crahst das design bei einem eintrag von heute, 15:45 weil da jemand nur punkte aneinandergereiht hat.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Entwurfsproblem: Aus Widgets in Datenbank schreiben? Basti PHP-Programmierung 3 29.03.2007 13:13
Problem bei Verarbeitung von Templates (Eigene Klassen) dago PHP-Programmierung 21 31.08.2006 16:02
welche Datenbank - Datentyp für Dateien risa Datenbanken 5 01.12.2005 15:17
Datenbank und Sicherheit sparrow Datenbanken 23 05.11.2005 17:45
Datenbank Verwaltung taskin73 Datenbanken 7 30.07.2005 17:07


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45