Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
Ahoj,
rad znal IDcka vzajemnych zapasu mezi 2 hraci. tabulka ------------ CREATE TABLE IF NOT EXISTS `zapasy_hraci` ( `zapasID` mediumint(9) NOT NULL, `hracID` mediumint(9) NOT NULL, `tymID` mediumint(9) NOT NULL, `grt_pos_before_match` smallint(6) NOT NULL, `grt_pos_after_match` smallint(6) NOT NULL, UNIQUE KEY `zapasID` (`zapasID`,`hracID`,`tymID`), KEY `hracID` (`hracID`), KEY `zapasID_2` (`zapasID`), KEY `tymID` (`tymID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; Dotaz SELECT t1.hracID, t1.zapasID, t2.hracID, t2.zapasID FROM zapasy_hraci t1 JOIN zapasy_hraci t2 ON t2.zapasID = t1.zapasID WHERE t1.hracID = 1116 AND t2.hracID = 1 Vysledek dotazu id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref zapasID,hracID,zapasID_2 hracID 3 const 19 Using index 1 SIMPLE t2 ref zapasID,hracID,zapasID_2 zapasID 6 1012_pes2.t1.zapasID,const 1 Using index Vypada to rychle nicmene, zda-se mi divne to ze to prochazi 19 radku, to je totiz celkovy pocet zapasu jak hrace 1 tak hrace 1116. Takze se mi zda, ze to prochazi proste vsechno i kdyz se indexy pouziji. Melo to by projit skutecny pocet vzajemnych Idcek (tj 3 = v me DB ) Nevi nekde proc tomu tak je, ci jak dotaz lepe sestrojit? |
||
Kajman_ Profil * |
#2 · Zasláno: 11. 11. 2009, 08:48:33
Jaký bude explain u
FROM zapasy_hraci t1 JOIN zapasy_hraci t2 ON t2.zapasID = t1.zapasID AND t2.hracID = 1 WHERE t1.hracID = 1116 Jinak si myslím, že klíč zapasID_2 nepřináší nic navíc než klíč zapasID. Pro tento konkrétní dotaz by pak mohlo být rychlejší mít v klíči hracID i sloupeček zapasID, ale jisté to není. |
||
Kcko Profil |
#3 · Zasláno: 11. 11. 2009, 09:24:39
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref zapasID,hracID,zapasID_2,slozeny hracID 3 const 19 1 SIMPLE t2 ref zapasID,hracID,zapasID_2,slozeny zapasID 6 1012_pes2.t1.zapasID,const 1 Vychazi to cca na stejno. Pred refactoringem aplikace jsem to mel v jedne tabulce ( ale tam byl vzdy 1 domaci a 1 host ) a ted to muze byt prave 1:n, takze to musim resit takto JOINem, ocividne to zrychlit uz nepujde. |
||
Časová prodleva: 14 let
|
0