/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MySQL] Join problem
Fra : Martin


Dato : 15-02-07 14:34

Jeg er gået så småt igang med at optimere en masse queries, men er lige
stådt ind i denne subselect. Den virker helt som den skal, så der er ikk
så meget der, men subselects de er (så vidt jeg kan huske) rimelig
resourcekrævende - så det ville da være dejligt at se en løsning på denne.

SELECT l.name AS name,l.link AS link
FROM menu_links AS l,menu_login AS u
WHERE
l.deleted = '0'
AND l._header_id = '1'
AND (
l.restricted = '0'
OR l.id
IN (
SELECT _menu_links_id
FROM menu_login
WHERE _login_id = '1'
)
)
ORDER BY l.sorter

 
 
Michael Zedeler (15-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 15-02-07 22:40

Martin skrev:
> Jeg er gået så småt igang med at optimere en masse queries, men er lige
> stådt ind i denne subselect. Den virker helt som den skal, så der er ikk
> så meget der, men subselects de er (så vidt jeg kan huske) rimelig
> resourcekrævende - så det ville da være dejligt at se en løsning på denne.

Subselects *burde* ikke være mere ressourcekrævende end joins, men min
erfaring er også at man skal prøve at omskrive til joins, hvis det kører
langsomt

> SELECT l.name AS name,l.link AS link
> FROM menu_links AS l,menu_login AS u
> WHERE
> l.deleted = '0'
> AND l._header_id = '1'
> AND (
> l.restricted = '0'
> OR l.id
> IN (
> SELECT _menu_links_id
> FROM menu_login
> WHERE _login_id = '1'
> )
> )
> ORDER BY l.sorter

Det bliver vist til noget i stil med

SELECT DISTINCT l.name AS name, l.link AS link
FROM menu_links AS l,
menu_login AS u,
menu_login AS u2
WHERE l.deleted = '0'
AND l._header_id = '1'
AND (
l.restricted = '0'
OR l.id = u2._menu_links_id
)
AND u2._login_id = '1'
ORDER BY l.sorter

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Martin (16-02-2007)
Kommentar
Fra : Martin


Dato : 16-02-07 14:14

Michael Zedeler wrote:
> Subselects *burde* ikke være mere ressourcekrævende end joins, men min
> erfaring er også at man skal prøve at omskrive til joins, hvis det kører
> langsomt

Nu kan jeg desværre ikke lige teste om hvad der går hurtigst, da jeg kun
har en 20-30 linjer i tabellerne.

> SELECT DISTINCT l.name AS name, l.link AS link
> FROM menu_links AS l,
> menu_login AS u,
> menu_login AS u2
> WHERE l.deleted = '0'
> AND l._header_id = '1'
> AND (
> l.restricted = '0'
> OR l.id = u2._menu_links_id
> )
> AND u2._login_id = '1'
> ORDER BY l.sorter

Den vil jeg da lige kigge på.
Må jeg lige spørge om hvorfor 2 gange menu_login, så vidt jeg lige kan
se bruges den der hedder u slet ikke?

Kristian Damm Jensen (19-02-2007)
Kommentar
Fra : Kristian Damm Jensen


Dato : 19-02-07 09:40

Michael Zedeler wrote:
> Martin skrev:
>> Jeg er gået så småt igang med at optimere en masse queries, men er
>> lige stådt ind i denne subselect. Den virker helt som den skal, så
>> der er ikk så meget der, men subselects de er (så vidt jeg kan
>> huske) rimelig resourcekrævende - så det ville da være dejligt at se
>> en løsning på denne.
>
> Subselects *burde* ikke være mere ressourcekrævende end joins, men min
> erfaring er også at man skal prøve at omskrive til joins, hvis det
> kører langsomt
>
>> SELECT l.name AS name,l.link AS link
>> FROM menu_links AS l,menu_login AS u
>> WHERE
>> l.deleted = '0'
>> AND l._header_id = '1'
>> AND (
>> l.restricted = '0'
>> OR l.id
>> IN (
>> SELECT _menu_links_id
>> FROM menu_login
>> WHERE _login_id = '1'
>> )
>> )
>> ORDER BY l.sorter
>
> Det bliver vist til noget i stil med
>
> SELECT DISTINCT l.name AS name, l.link AS link
> FROM menu_links AS l,
> menu_login AS u,
> menu_login AS u2
> WHERE l.deleted = '0'
> AND l._header_id = '1'
> AND (
> l.restricted = '0'
> OR l.id = u2._menu_links_id
> )
> AND u2._login_id = '1'
> ORDER BY l.sorter

Det ser ærlig talt lidt ubehageligt ud. Eftersom du har join-betingelse på
menu_links i en OR, kommer du til at lave det kartesiske produkt.

--
Venlig hilsen /Best regards
Kristian Damm Jensen



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste