PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
mysql päring - no ei saa aru, miks
Postitaja: võhik 2015-06-21 01:13:58
Tabelis on kuskil 500 000 rida ja kuskil 40 veergu. Korraga soovin näidata 30 rida ja saab vaadata siis 30 järgnevat jne (lehtedeks jagamine).

1. teen päringu, kus väljundisse võtan 10 veergu. Päring kestab keskmiselt 5 sekundit.

2. teen täpselt sama päringu, kuid väljundisse võtan ainult 1 välja "id". Siis teen teise päringu, kus võtan vastavate ID'de 10 veergu. Päringud kestavad kokku umbes 2 sekundit.


Miks nii ja kust selline vahe? Esimesel juhul teen 1 päringu, teisel juhul 2 päringut ja teine juhtum peaks loogika järgi olema aeglasem, kuid on kordades kiirem. Miks? Tehtavad päringud on 1:1 samad, ainuke erinevus on, mitu veergu väljundisse tulevad...
RE: mysql päring - no ei saa aru, miks
Postitaja: abistaja 2015-06-21 11:34:13
aga sa ju võrad esimesel juhul 30 rida andmebaasist ja teisel juhul 12 rida, see teebki üle poole vähem ja seeda üle poole kiirem ?

Ega ma võin tegelikult eksida ka, et keegi targem võiks siia midagi postitada aga loogiliselt mõeldes, peakski nii olema ju ?
RE: mysql päring - no ei saa aru, miks
Postitaja: hhhhh 2015-06-21 12:53:44
1. 500 000 rida ja kuskil 40 veergu - pole palju
2. Päring kestab keskmiselt 5 sekundit - kas päring või aeg koos andmete v'ljastamisega, kui ainult päring ja see toimub serveril, siis liiga kaua ja siis tuleb vaadata, mis on päringuga, et seda optimeerida, kui aga nõrgemal arvutil - siis ok ajaga.
3. Aeg sõltub mitte ainult p'ringu tulemusena saadud andmetest, vaid ka sellest, mis ressursse vajab p'ring ja mida too arvuti, kus päring toimub, veel teeb samal ajal jne...
4. Kui tegemist on Mysql-ga ja näiteks kasutad phpMyadmini, siis enne pane linnuke Profileerimise kõrvale.
5. Veel ajast: ära unusta, et kui väljastad näiteks alates 10st reast, siis see ei tähenda, et mingi osuti suunab otsekohe reale nr.10, et sealt alustada, kujuta endale ette, et sa avad mingi teksti ja otsid 10t rida, selleks liigud ülevalt alla esimest kuni 10ni.
noh jne, kõik nö "sõltub"....
RE: mysql päring - no ei saa aru, miks
Postitaja: vbn 2015-06-21 17:45:40
TSITEERITUD:
Tabelis on kuskil 500 000 rida ja kuskil 40 veergu. Korraga soovin näidata 30 rida ja saab vaadata siis 30 järgnevat jne (lehtedeks jagamine).

1. teen päringu, kus väljundisse võtan 10 veergu. Päring kestab keskmiselt 5 sekundit.

2. teen täpselt sama päringu, kuid väljundisse võtan ainult 1 välja "id". Siis teen teise päringu, kus võtan vastavate ID'de 10 veergu. Päringud kestavad kokku umbes 2 sekundit.


Miks nii ja kust selline vahe? Esimesel juhul teen 1 päringu, teisel juhul 2 päringut ja teine juhtum peaks loogika järgi olema aeglasem, kuid on kordades kiirem. Miks? Tehtavad päringud on 1:1 samad, ainuke erinevus on, mitu veergu väljundisse tulevad...
RE: mysql päring - no ei saa aru, miks
Postitaja: vbn 2015-06-21 17:47:46
1 kas on indekseeritud väljad, mida kastutakse where, order by, group by järel
2 kui versioon väiksem Mysql il kui 5.6 peaks olema tabeli mootoriks MyIsam READ operatsioonide puhul, st tee Mysql upgrade 5.6 peale

5 ainult select päringu jaoks, mis ei kasuta where, order by, goup by või join on liiga palju
RE: mysql päring - no ei saa aru, miks
Postitaja: võhik 2015-06-21 19:54:44
Optimeerimine optimeerimiseks, las see olla. Mõõtsin ainult sql päringu kestvust ja proovin paremini seletada


select * from table where status='1' limit 0,30


võtab 5 sekundit


select id from table where status='1' limit 0,30
siin korjan id'd massiivi ja teen uue päringu
select * from table where id IN (...)


See võtab 2 sekundit (esimese päringu algus + php + teine päring).

Et ma saan aru, et saab optimeerida ja parandada jne jne jne, lihtsalt ma ei saa aru, et esimesel juhul on 1 päring, teisel juhul 2 päringut + pho tegevus ja asi on ikka kiirem....
RE: mysql päring - no ei saa aru, miks
Postitaja: aaaaaaa 2015-06-21 22:13:48
TSITEERITUD:
Optimeerimine optimeerimiseks, las see olla. Mõõtsin ainult sql päringu kestvust ja proovin paremini seletada


select * from table where status='1' limit 0,30


võtab 5 sekundit


select id from table where status='1' limit 0,30
siin korjan id'd massiivi ja teen uue päringu
select * from table where id IN (...)


See võtab 2 sekundit (esimese päringu algus + php + teine päring).

Et ma saan aru, et saab optimeerida ja parandada jne jne jne, lihtsalt ma ei saa aru, et esimesel juhul on 1 päring, teisel juhul 2 päringut + pho tegevus ja asi on ikka kiirem....


proovi teha esimesena teine päring ja teisena esimene... ja vaata aega
RE: mysql päring - no ei saa aru, miks
Postitaja: stalin 2015-06-21 23:35:15
TSITEERITUD:
Optimeerimine optimeerimiseks, las see olla. Mõõtsin ainult sql päringu kestvust ja proovin paremini seletada


select * from table where status='1' limit 0,30


võtab 5 sekundit


select id from table where status='1' limit 0,30
siin korjan id'd massiivi ja teen uue päringu
select * from table where id IN (...)
pole andmeid, pole probleemi

drop table table;
select * from table where status='1' limit 0,30 /* 0.00 sec */


See võtab 2 sekundit (esimese päringu algus + php + teine päring).

Et ma saan aru, et saab optimeerida ja parandada jne jne jne, lihtsalt ma ei saa aru, et esimesel juhul on 1 päring, teisel juhul 2 päringut + pho tegevus ja asi on ikka kiirem....
RE: mysql päring - no ei saa aru, miks
Postitaja: võhik 2015-06-22 00:01:18
TSITEERITUD:


proovi teha esimesena teine päring ja teisena esimene... ja vaata aega


testitud on ikka nii, et esimene juhtum ja mõõdetud aega - teine juhtum on välja kommenteeritud. Siis esimene välja kommenteeritud ja teist testitud, mitte ei ole neid järjest proovitud.

Samuti ei ole testitud 1 kord, kuna tulemused natukene iga kord erinevad, kuid see 5 sekundit ja 2 sekundit on üldine keskmine (mõni millisekund iga kord siia/sinna)
RE: mysql päring - no ei saa aru, miks
Postitaja: blaa 2015-06-22 00:08:35
proovi korra SELECT SQL_NO_CACHE * from.....

Põhjuseid võib mitmeid olla, teadmata tabeli täpset struktuuri, näidisandmeid ja tegelikke päringuid, ei saa midagi konkreetset soovitada.
Võib olla näiteks nii, et esimesel puhul sorteerimisel pannakse ajutisse tabelisse rohkem andmeid, kui vaja.
RE: mysql päring - no ei saa aru, miks
Postitaja: blaa 2015-06-22 00:11:42
TSITEERITUD:
status='1'

ma oletan, et status on baasis integer, mis põhjusel seda stringiga võrldema peab?
RE: mysql päring - no ei saa aru, miks
Postitaja: võhik 2015-06-22 00:20:09
TSITEERITUD:

ma oletan, et status on baasis integer, mis põhjusel seda stringiga võrldema peab?


nojah, see on jälle selline optimeerimise küsimus, aga mõlemad päringud on samad...

CACHE - tegelikult on mysql cache maha keeratud.

Probleemi otseselt tegelikult ei ole, aga lihtsalt ennast huvitab, et kui tõesti võtta select päringusse suure tabeli puhul rohkem andmeid vs selle kohta teha eraldi päring, siis teine meetod on kohati kiirem...lihtsalt siiani olin arvamusel, et 1 sql on kiirem kui 2 sql'i:)
RE: mysql päring - no ei saa aru, miks
Postitaja: adblocki mees 2015-06-23 15:12:56
Blät :D ikka näitab et uus kirje olnud, aga pole. :D
RE: mysql päring - no ei saa aru, miks
Postitaja: Aigar. 2015-07-09 00:02:26
vanasti oli 'explain' abiks

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0924561023712