WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 09.04.2006, 19:01   #1
James
Meisteroptiker
 
Registriert seit: 19.05.2000
Ort: Salzburg
Alter: 43
Beiträge: 1.495


James eine Nachricht über ICQ schicken
Standard mysql und join geschwindigkeit...

das ganze ist eine mysql db...

habe da zwei tables

struktur:

Zitat:
CREATE TABLE `clan` (
`id` float NOT NULL auto_increment,
`cname` varchar(255) NOT NULL default '',
`gott` varchar(255) NOT NULL default '',
`miss` tinyint(1) NOT NULL default '0',
`uber` char(2) NOT NULL default '0',
`update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`Bevölkerung` float NOT NULL default '0',

PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=394 ;

CREATE TABLE `map` (
`id` int(11) NOT NULL default '0',
`tx` int(11) NOT NULL default '0',
`ty` int(11) NOT NULL default '0',
`cname` text NOT NULL,
`gt` int(11) NOT NULL default '0',
`nick` text NOT NULL,
`clan` text NOT NULL,
`rang` int(11) NOT NULL default '0',
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='test';
map(15 000 einträge größe < 1mb) und clan(zur zeit 200 einträge können maximal 15 000 einträge werden)

wenn ich dieses query ausführe

Zitat:
SELECT * FROM map LEFT JOIN clan ON map.cname = clan.cname ORDER by ty
braucht das 36.6018 sek das dauert mir zu lange...

map bleibt für 24 stunden immer gleich
clan kann sich jederzeit ändern...

und jetzt will ich dann später noch einen 3. table hinzujoinen...

meine frage wäre... benutz ich da den join falsch? oder gibts da ne andere möglichkeit die schneller ist?

geht da irgendwas mit index schneller...?
James ist offline   Mit Zitat antworten
Alt 09.04.2006, 19:14   #2
James
Meisteroptiker
 
Registriert seit: 19.05.2000
Ort: Salzburg
Alter: 43
Beiträge: 1.495


James eine Nachricht über ICQ schicken
Standard

is zwar irfgendwie deppert aber als ich das mit dem index geschrieben habe hab ich das mal ausprobiert... und siehe da...

also in map und clan nen index über cname gemacht (und in map das cname feld auf varchar geändert)

und jetzt braucht das querry nur mehr 0.0355 sek geilo

naja kann mans jetzt noch irgendwie verbessern? oder is das mit dem join doch richtig so wie ich das mache?
James ist offline   Mit Zitat antworten
Alt 18.04.2006, 09:13   #3
Farkarich
Senior Member
 
Registriert seit: 19.09.2000
Alter: 40
Beiträge: 122


Farkarich eine Nachricht über ICQ schicken
Standard na klar geht da noch was schneller!

Wegen deines Joins:

Ich denke mal dass es schneller gehen würde wennst das über einen numärischen FK machst, sprich über die ID joinst und nicht über ein VARCHAR feld machst, dann müsse es noch schneller gehen, wirst zwar jetzt ned wirklich merken, aber wennst dann mal mehr daten drin hast dann wirst es sicher merken.

Bzw wärs ned schlecht, wenn du IDs zum joinen nimmst weil die sind wirklich eindeutig und ein VARCHAR muss ned imemr eindeutig sind (gleicher name des clans in 2 datensätzen!!!)

lg
bernd
Farkarich ist offline   Mit Zitat antworten
Alt 18.04.2006, 10:49   #4
pc.net
Aussteiger
 
Benutzerbild von pc.net
 
Registriert seit: 07.10.2001
Ort: Nettistan
Beiträge: 12.997

Mein Computer

Standard

merke:
  • join geht nicht immer über einen index schneller (je nach verwenderter DB, DB-design, tabellengröße oder optimierungen durch den abfrage-analyzer)
  • um so größer der index, um so langsamer die suche darauf
  • index auf textspalten (zb. mit 255 zeichen) ist wesentlich größer als index auf eine integer-spalte
wenn sowieso immer der clan in der map befüllt sein muss, dann solltest du eine referenz (=fremdschlüssel bzw. foreign-key) auf den primäschlüssel des clans vorsehen ...

achja: es empfiehlt sich auch immer den gleichen datentyp für die primär-/fremdschlüssel zu verwenden ...
____________________________________
Praktizierender Eristiker

No hace falta ser un genio para saber quién dijo eso.
Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein.
pc.net ist offline   Mit Zitat antworten
Alt 18.04.2006, 14:03   #5
James
Meisteroptiker
 
Registriert seit: 19.05.2000
Ort: Salzburg
Alter: 43
Beiträge: 1.495


James eine Nachricht über ICQ schicken
Standard

es wird ned der clan geoint sonder "höhlennamen" die gibts nur einmal... also genau 15 000 verschiedene...

ja denke auch das es über die id besser wäre das des so ausschaut hat sich ergeben weil ich immer alles irgendwie erweitert habe ohne das vorher richtig zu planen ^^
James ist offline   Mit Zitat antworten
Alt 18.04.2006, 18:13   #6
Farkarich
Senior Member
 
Registriert seit: 19.09.2000
Alter: 40
Beiträge: 122


Farkarich eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von pc.net
merke:
  • join geht nicht immer über einen index schneller (je nach verwenderter DB, DB-design, tabellengröße oder optimierungen durch den abfrage-analyzer)
  • um so größer der index, um so langsamer die suche darauf
  • index auf textspalten (zb. mit 255 zeichen) ist wesentlich größer als index auf eine integer-spalte
wenn sowieso immer der clan in der map befüllt sein muss, dann solltest du eine referenz (=fremdschlüssel bzw. foreign-key) auf den primäschlüssel des clans vorsehen ...

achja: es empfiehlt sich auch immer den gleichen datentyp für die primär-/fremdschlüssel zu verwenden ...
ok, hab das zwar ned so schön ausgedrückt aber is doch genau das was ich gesagt habe oder??? *ggg*
Farkarich ist offline   Mit Zitat antworten
Alt 19.04.2006, 06:44   #7
pc.net
Aussteiger
 
Benutzerbild von pc.net
 
Registriert seit: 07.10.2001
Ort: Nettistan
Beiträge: 12.997

Mein Computer

Standard

Zitat:
Original geschrieben von Farkarich
ok, hab das zwar ned so schön ausgedrückt aber is doch genau das was ich gesagt habe oder??? *ggg*
____________________________________
Praktizierender Eristiker

No hace falta ser un genio para saber quién dijo eso.
Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein.
pc.net ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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

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

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:28 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag