Pytanie o poprawna kwerende w mysql 5
DjAvX - 14-12-2006 16:09
Pytanie o poprawna kwerende w mysql 5
Witam, mam takie zapytanie:
SELECT count(mag.id) AS total FROM ebsmagazyn as mag, data AS td,links as lnk1,links as lnk2 WHERE (mag.bitflags & 2 = 0) and (mag.typ=2) and (mag.id=td.id) and (td.Vd='A T') and (lnk1.srcid=mag.id) and (lnk1.srctype='2') and (lnk1.dsttype='1') and (lnk1.dstid='2340') and (lnk2.srcid=mag.id) and (lnk2.srctype='2') and (lnk2.dsttype='100') and (lnk2.dstid='1643')
wszystko pieknie ale o ile w mysql 4 dzialalo jak powinno o tyle w mysql 5 dubluje rekordy... gdzie jest b??d?? jak to napisac zeby bylo w miare szybkie?
P.S. co jest szybsze: uzycie aliasa i dodanie warunkow w where czy uzycie LEFT JOIN ?
-- DjAvX
=?UTF-8?B?RmlsaXAgUmVtYmlhxYJrb3dza2k=?= - 14-12-2006 16:09
DjAvX napisa??(a): > Witam, > mam takie zapytanie: > > SELECT count(mag.id) AS total > FROM ebsmagazyn as mag, data AS td,links as lnk1,links as lnk2 > WHERE (mag.bitflags & 2 = 0) and (mag.typ=2) and (mag.id=td.id) and > (td.Vd='A T') and > (lnk1.srcid=mag.id) and (lnk1.srctype='2') and (lnk1.dsttype='1') and > (lnk1.dstid='2340') and > (lnk2.srcid=mag.id) and (lnk2.srctype='2') and (lnk2.dsttype='100') and > (lnk2.dstid='1643') > > wszystko pieknie ale o ile w mysql 4 dzialalo jak powinno o tyle w mysql 5 > dubluje rekordy... gdzie jest bÂ?Â?d?? dziwne. mog??by?? pokazaÄ? SHOW CREATE TABLE dla tych tabel? i co?? wiÄ?cej powiedzieÄ? o tym dublowaniu? co siÄ? powiela?
> jak to napisac zeby bylo w miare szybkie? > > P.S. co jest szybsze: uzycie aliasa i dodanie warunkow w where czy uzycie > LEFT JOIN ? select * from mag,td where (mag.id=td.id) _nie_ jest r??wnowa??ne select * from mag LEFT JOIN td on (mag.id=td.id)
natomiast je??li usuniesz LEFT i zostawisz tylko JOIN (co jest synonimem dla INNER JOIN) to obie konstrukcje sÄ? r??wnowa??ne
nie wiem co jest szybsze w mysql 5. pewnie zale??y od danych :)
F.
keczerad - 14-12-2006 16:09
Filip Rembia??kowski napisa??(a):
> natomiast je??li usuniesz LEFT i zostawisz tylko JOIN (co jest synonimem dla > INNER JOIN) to obie konstrukcje sÄ? r??wnowa??ne > > nie wiem co jest szybsze w mysql 5. pewnie zale??y od danych :)
inner jest szybszy, moim zdaniem szybkosc w niektorych przypadkach jest drugorzedna, natomiast jest zasadnicza roznica miedzy INNER a LEFT, INNER nie zwroci rekordu a LEFT zwroci w przypadku jesli warunek zlaczenie nie zostanie spelniony.
--
keczerad
http://www.e-mo.com.pl sklep w (X)HTML
DjAvX - 14-12-2006 16:09
> inner jest szybszy, moim zdaniem szybkosc w niektorych przypadkach jest > drugorzedna, natomiast jest zasadnicza roznica miedzy INNER a LEFT, > INNER nie zwroci rekordu a LEFT zwroci w przypadku jesli warunek > zlaczenie nie zostanie spelniony. yyy czyli jesli warunek podany w LEFT sie nie spelni zostanie zwrocony rekord a a w INNER odwrotnie? -- DjAvX
=?UTF-8?B?RmlsaXAgUmVtYmlhxYJrb3dza2k=?= - 14-12-2006 16:09
DjAvX napisa??(a): >> inner jest szybszy, moim zdaniem szybkosc w niektorych przypadkach jest >> drugorzedna, natomiast jest zasadnicza roznica miedzy INNER a LEFT, >> INNER nie zwroci rekordu a LEFT zwroci w przypadku jesli warunek >> zlaczenie nie zostanie spelniony. > yyy > czyli jesli warunek podany w LEFT sie nie spelni zostanie zwrocony rekord a > a w INNER odwrotnie? problem wpisaÄ? w google "sql join"?
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.pl
Cytat
Decede mihi sole - nie zas³aniaj mi s³onca. Gdy kogo¶ kochasz, jeste¶ jak stworzyciel ¶wiata - na cokolwiek spojrzysz, nabiera to kszta³tu, wype³nia siê barw±, ¶wiat³em. Powietrze przytula siê do ciebie, choæby by³ mróz, a ty masz w sobie tyle rado¶ci, ¿e musisz j± rozdawaæ woko³o, bo siê w tobie nie mie¶ci Hoc fac - tak czyñ. A tergo - od ty³u; z ty³u. I czarne w³osy posiwiej±. Safona |
|