Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  SQL kiiruse jamad alampäringuga märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 04.02.2010 19:53:03 SQL kiiruse jamad alampäringuga vasta tsitaadiga

Teema selles, et on päring kujul
SELECT * FROM a WHERE c_id IN (SELECT c2.id FROM c c1 RIGHT JOIN c c2 ON c2.d LIKE CONCAT(c1.d,'%') WHERE c1.e LIKE '%midagi%')


Ja asi võtab kuradima kaua aega, nii umbes 7-8 sekundit. Alampäring võtab aega ainult mõne millisekundi ringis ja tagastab kusagil 15 väärtust. Kui alampäringu tulemus käsitsi IN tingimusse kirjutada, siis on kiirus korras.
Baasiks on MySQL 5.1.42.

Mis ma kahe silma vahele jätnud olen või on see mingi MySQL spetsiifiline kala?


viimati muutis DoS 04.02.2010 20:11:09, muudetud 1 kord
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
Brigadir
HV vaatleja
Brigadir

liitunud: 21.05.2002




sõnum 04.02.2010 20:06:02 vasta tsitaadiga

kas sul see päring üldse töötab?

"FROM c c1 RIGHT JOIN c c1 ON " peaks äkki olema "FROM c c1 RIGHT JOIN c c2 ON "

_________________
Vähem möla, pikem samm!
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 04.02.2010 20:11:31 vasta tsitaadiga

Jah päring töötab, see oli näpuviga seal.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
karu
HV kasutaja

liitunud: 08.08.2002




sõnum 04.02.2010 20:49:00 vasta tsitaadiga

kui suur on 'a' tabel ? võibolla leiad siit midagi http://dev.mysql.com/doc/refman/5.0/en/in-subquery-optimization.html
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 04.02.2010 20:56:46 vasta tsitaadiga

'a' on kusagil 90000 rida.

Leidsin ühe arutelu http://bugs.mysql.com/bug.php?id=9090 ja tulebki välja, et selliste päringute aeglus on lihtsalt MySQL 'featuur'.
SELECT * FROM a WHERE c_id IN (SELECT id FROM (SELECT c2.id FROM c c1 RIGHT JOIN c c2 ON c2.d LIKE CONCAT(c1.d,'%') WHERE c1.e LIKE '%midagi%') as x)
tegi asja umbes 40 korda kiiremaks, millest esialgu ehk piisab.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
kullar
HV kasutaja
kullar

liitunud: 26.11.2006



Autoriseeritud ID-kaardiga

sõnum 04.02.2010 21:08:02 vasta tsitaadiga

kas c_id on indekseeritud?
_________________
Online Perekonna Eelarve, Keerukamad veebipõhised infosüsteemid jms
Kommentaarid: 27 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 04.02.2010 21:10:02 vasta tsitaadiga

Jah ikka
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  SQL kiiruse jamad alampäringuga
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.