WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   mysql und join geschwindigkeit... (http://www.wcm.at/forum/showthread.php?t=189286)

James 09.04.2006 19:01

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 09.04.2006 19:14

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 :hehe:

naja kann mans jetzt noch irgendwie verbessern? oder is das mit dem join doch richtig so wie ich das mache?

Farkarich 18.04.2006 09:13

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

pc.net 18.04.2006 10:49

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 ;) ...

James 18.04.2006 14:03

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 :hehe: das des so ausschaut hat sich ergeben weil ich immer alles irgendwie erweitert habe ohne das vorher richtig zu planen ^^

Farkarich 18.04.2006 18:13

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*

pc.net 19.04.2006 06:44

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*
;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:38 Uhr.

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