Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
mikk36
HV Guru

liitunud: 21.02.2004
|
27.01.2014 23:24:31
MySQL-i päringut efektiivsemaks |
|
|
Hei,
Kerge mure ühe päringuga, ehk on siin keegi, kes oskab vihjata või abi anda et kuidas teist kiiremaks saada?
sql:
|
SELECT stats.date, stats.acceptedMegahashesPerSecond, stats.rejectedMegahashesPerSecond, AVG(stats2.acceptedMegahashesPerSecond) AS acceptedMegahashesPerSecond5HourAverage, AVG(stats2.rejectedMegahashesPerSecond) AS rejectedMegahashesPerSecond5HourAverage FROM stats LEFT OUTER JOIN stats stats2 ON stats2.date BETWEEN DATE_ADD(stats.date, INTERVAL -5 HOUR) AND stats.date WHERE stats.address = "19hKwU5NmGRtzLdz8Xd2QbPn7EMzQ26m25" AND stats2.address = "19hKwU5NmGRtzLdz8Xd2QbPn7EMzQ26m25" GROUP BY stats.date ORDER BY stats.date ASC
|
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
27.01.2014 23:59:20
|
|
|
Redikate, vaata 9. rida.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Renka
HV Guru

liitunud: 01.04.2002
|
28.01.2014 00:58:35
|
|
|
mikk36, kaks eraldi päringut ei oleks mõistlikum? Või siis UNIONiga ühte kokku pannes?
Kui ma õigesti mäletan siis OUTER join puhul kasutatakse temp tabelit igal juhul.
_________________ There is no place like 127.0.0.1 |
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
28.01.2014 02:09:09
|
|
|
mikk36 kirjutas: |
Redikate, vaata 9. rida. |
nvm, sain.
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
RassK
HV Guru

liitunud: 17.01.2007
|
28.01.2014 02:42:00
|
|
|
Protsentuaalset parandust välja pakkuda ei oska... aga vaata, et tmp tabeli mällu kirjutamisel confis määratud mälu täis ei saa, et ta seda kettale ei kirjutaks.
|
|
Kommentaarid: 116 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
101 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
28.01.2014 12:22:30
|
|
|
Lihtsalt mõte - hetkel tehakse join ära ja siis hakatakse where osa närima. Kui see pole kokkusattumus, et antud näites stats.address ja stats2.address samad on, siis mina teeks joini nii:
LEFT OUTER JOIN stats stats2
ON stats.address = stats2.address and stats2.date BETWEEN DATE_ADD(stats.date, INTERVAL -5 HOUR) AND stats.date
ja WHERE osas võrdleks ainult stats.address välja
Lisaks.... antud näite puhul tundub mulle, et pole võimalust, et stats2-st midagi ei leita, seega LEFT JOIN pole otseselt vajalik. Proovi LEFT JOIN asemel INNER JOINi kasutada, INNER JOIN on kiirem.
EDIT ühesõnaga soovitaks proovida sellist päringut:
sql:
|
SELECT stats.date, stats.acceptedMegahashesPerSecond, stats.rejectedMegahashesPerSecond, AVG(stats2.acceptedMegahashesPerSecond) AS acceptedMegahashesPerSecond5HourAverage, AVG(stats2.rejectedMegahashesPerSecond) AS rejectedMegahashesPerSecond5HourAverage FROM stats INNER JOIN stats stats2 ON stats.address = stats2.address AND stats2.date BETWEEN DATE_ADD(stats.date, INTERVAL -5 HOUR) AND stats.date WHERE stats.address = "19hKwU5NmGRtzLdz8Xd2QbPn7EMzQ26m25" GROUP BY stats.date ORDER BY stats.date ASC
|
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
28.01.2014 13:40:48
|
|
|
/tmp on niigi mapitud juba tmpfs'ina RAMis.
napoleon, kiirem see päring kuidagi pole kahjuks, aeglane osa on endiselt temp tabelisse kopeerimine.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
andresv
HV kasutaja
liitunud: 06.12.2004
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
29.01.2014 20:14:06
|
|
|
Sorteerimine ei mõjutanud üldse tulemust.
Jäin praegu sellise päringu peale:
sql:
|
SELECT s1.date, s1.acceptedMegahashesPerSecond, s1.rejectedMegahashesPerSecond, AVG(s2.acceptedMegahashesPerSecond) AS acceptedMegahashesPerSecond5HourAverage, AVG(s2.rejectedMegahashesPerSecond) AS rejectedMegahashesPerSecond5HourAverage FROM ( SELECT stats.date, stats.acceptedMegahashesPerSecond, stats.rejectedMegahashesPerSecond FROM stats WHERE stats.address = "19hKwU5NmGRtzLdz8Xd2QbPn7EMzQ26m25" ) AS s1, ( SELECT stats.date, stats.acceptedMegahashesPerSecond, stats.rejectedMegahashesPerSecond FROM stats WHERE stats.address = "19hKwU5NmGRtzLdz8Xd2QbPn7EMzQ26m25" ) AS s2 WHERE s2.date BETWEEN DATE_ADD(s1.date, INTERVAL -5 HOUR) AND s1.date GROUP BY s1.date ORDER BY s1.date ASC
|
Eriti kiireks muutub see päring siis, kui soovida väljavõtet vaid viimase viie päeva kohta näiteks:
sql:
|
SELECT s1.date, s1.acceptedMegahashesPerSecond, s1.rejectedMegahashesPerSecond, AVG(s2.acceptedMegahashesPerSecond) AS acceptedMegahashesPerSecond5HourAverage, AVG(s2.rejectedMegahashesPerSecond) AS rejectedMegahashesPerSecond5HourAverage FROM ( SELECT stats.date, stats.acceptedMegahashesPerSecond, stats.rejectedMegahashesPerSecond FROM stats WHERE stats.address = "19hKwU5NmGRtzLdz8Xd2QbPn7EMzQ26m25" AND stats.date > DATE_ADD(NOW(), INTERVAL -5 DAY) ) AS s1, ( SELECT stats.date, stats.acceptedMegahashesPerSecond, stats.rejectedMegahashesPerSecond FROM stats WHERE stats.address = "19hKwU5NmGRtzLdz8Xd2QbPn7EMzQ26m25" AND stats.date > DATE_ADD(DATE_ADD(NOW(), INTERVAL -5 DAY), INTERVAL -5 HOUR) ) AS s2 WHERE s2.date BETWEEN DATE_ADD(s1.date, INTERVAL -5 HOUR) AND s1.date GROUP BY s1.date ORDER BY s1.date ASC
|
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
15.02.2014 22:34:02
|
|
|
Lihtsalt remargina - elu näitab et kuupäeva järgi sorteerimine ongi aeglane. Mul on üks ~3 mil reaga tabel, sorteerides kuupäeva järgi on esimese 10 kuvamine ~3-4 sek, samas sorteerides aadressi järgi ~0,5..0,7 s. Oracle.
Vahepeal kui päring väga aeglaseks läheb, siis aitab tabeli analüüsimine (tabel kasvab kiiresti).
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
|