Jump to content
php.lv forumi

Optimizācija


aika

Recommended Posts

problēma: esošais (acīmredzot patizlais) pieprasījums pārsniedz 5s. 

 

 

SELECT * FROM a
INNER JOIN b ON b.id = a.id
LEFT JOIN c ON c.id = b.c_id
WHERE a.u_id = 'f53c6deff44e23439d2b84d26820cec9' 
ORDER BY a.c, a.e LIMIT 0, 25;

 

kā, lūdzu,  nooptimizēt?!

 

a tabula ~ 10K, b tabula ~ 50k, c tabula ~ 100 ierakstu.

visi id varchar(32) ar indeksiem

 

paldies jau iepriekš! 

Link to comment
Share on other sites

1) * vietā saliec tos laukus, kurus patiešam vajag

2) uztaisi indeksu, kura iekļāuj a.u_id (4 chari), a.id un selectā iekļaujamos laukus, ja tie nav text

3) jabūt indeksam b.id un b.c_id

4) tik nīkulīgām tabulām id vajadzētu smallint

Edited by l27
Link to comment
Share on other sites

varchar(32)

diemžēl ID tipus vairs mainīt nav iespējams. 

Raiņa kopotus rakstu tur mēģini sarakstīt?

Rādi redzēt, ko atgriež

 

EXPLAIN SELECT * FROM a
INNER JOIN b ON b.id = a.id
LEFT JOIN c ON c.id = b.c_id
WHERE a.u_id = 'f53c6deff44e23439d2b84d26820cec9' 
ORDER BY a.c, a.e LIMIT 0, 25;
Edited by Val
Link to comment
Share on other sites

uz id indeksa uzliec garumu 4. Ja tie ir primary key, tad noņem. No šāda pasākuma būs jēgas,  ja id pirmie 4 simboli ir daudzmaz unikāli.

ID ir primary. ko nozīmē - daudz maz unikāli?  Kāpēc ņemt nost primary?!

Link to comment
Share on other sites

Nomainot php kodu tiku vaļā no viena innera, tomēr joprojām ~ 4s.

 

EXPLAIN SELECT a.id, a.t, a.e, a.u, a.r, a.w
FROM a
INNER JOIN b ON b.a_id = a.id
WHERE b.u_id = 'f53c6deff44e23439d2b84d26820cec9'
ORDER BY a.c, a.e
LIMIT 0 , 25

 

 

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE a ALL NULL NULL NULL NULL 60358 Using filesort

1 SIMPLE b ref a_id,u_id,abi a_id 98 func 1 Using where

 

`abi` ir dubultiindekss a_id un u_id

 

P.S. lauku un tabulu nosaukumi mainīti

P.S.S. tabula nogļukoja, sory

Edited by aika
Link to comment
Share on other sites

ID ir primary. ko nozīmē - daudz maz unikāli?  Kāpēc ņemt nost primary?!

1) Ja visiem ierakstiem pirmie 4 simboli ir identiski, tad no indeksa uz šiem simbolim nebūs jēga

2) nav jegas no primary, ja tas ir 32 baiti garš.

Edited by l27
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...