SELECT * FROM user AS u INNER JOIN user_e AS ue ON u.user_id = ue.user_extended_id WHERE userEmail != '' AND user_id IN(
SELECT boardUser FROM board WHERE boardClub = variabel)
mySql är det som används.
De 3 tabellerna:
board
-----
boardID primary AI
boardUser int(10)
boardClub int(10)
1900 rader
user
-----
userID primary AI
userEmail varchar(100)
55000 rader
user_e
------
userID primary
userClub int(10)
55000 rader
Problemet är att ovanstående anrop tar ca 1 minut. Än värre är det om jag kör ytterligare en nästling (query1 IN(query2 IN (query3)), då sänker jag hela siten som slutar svara på anrop.
Så, är det något fel på koden, är det en dålig metod som är seg eller är något annat fel?
SELECT * FROM user AS u
INNER JOIN user_e AS ue ON u.user_id = ue.user_extended_id
INNER JOIN board b ON u.user_id = b.boardUser
WHERE userEmail != '' AND b.boardClub = variabel;
Du bör nästan alltid undvika IN av prestandaskäl. Prova frågan ovan. Har du för övrigt satt index på alla relevanta kolumner? Alla primärnycklar bör vara indexerade som sådana. User_extended_id bör ha ett normalt index.
Så har iaf en lösning, vore bara intressant att veta varför det blir så fel...
Tack @nders!
När du kör originalfrågan sker troligen följande:
SELECT boardUser FROM board WHERE boardClub = variabel körs och du får tillbaka ett resultat-set på ett par rader.
Varje enskild post i user söks igenom för att se om någon rad matchar resultatet från 1). Hade du använt en join hade databasen kunnat använda genvägar för att göra samma sak snabbare.
Har du riktig otur körs frågan i 1) en gång för varje rad i user.
264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849