1 2 3 4 5 6 7 8 9 10 11 12 | <?php $sql = "SELECT pagina.id AS paginaid, pagina.title AS paginatitle, pagina.link AS paginalink, buttons.button_id AS button_id, buttons.id AS id FROM 'pagina' JOIN buttons ON pagina.id = buttons.id ORDER BY `paginatitle` ASC;"; ?> |
Ik moest voor ik moderator werd van B&H en GAM inderdaad eerst een PHP/mySQL toets afnemen en deze met minimaal 95% aan goede antwoorden behalen.quote:
keer tijd om je db class uit te breiden? Zodat hij dit soort dingen aangeeft.quote:Op donderdag 10 november 2011 22:33 schreef boem-dikkie het volgende:
Goedenavond, ik ben boem-dikkie de klapmongool en ik ga kappen voor vanavond. Ik had nog geen database verbinding op de pagina waar de output moest komen.!!!!
Dat heeft niet perse zo veel zin want de hele database class stond nog niet op die pagina.quote:Op donderdag 10 november 2011 22:37 schreef Pakspul het volgende:
[..]
keer tijd om je db class uit te breiden? Zodat hij dit soort dingen aangeeft.
zulke dingen doe je ook in je db-classquote:Op donderdag 10 november 2011 22:24 schreef boem-dikkie het volgende:
Hij laat mijn if(!$result){ echo "foutmelding" }; zien. Hij kan de query dus niet uitvoeren.
Je moet die db class dan ook gebruiken om queries uit te voeren, dan heb je nooit de kans om een query uit te voeren zonder dat de db class geladen is.quote:Op donderdag 10 november 2011 22:52 schreef boem-dikkie het volgende:
[..]
Dat heeft niet perse zo veel zin want de hele database class stond nog niet op die pagina.
1 2 3 4 5 | SELECT TIME_FORMAT(TIMEDIFF(landingtime,starttime),"%k:%i") AS flighttime ORDER BY flighttime <<<<<<--------------- LIMIT 0,10 |
Dat moet, met een index erop. Je kunt het resultaat ook 1x/dag berekenen en ergens opslaan, zoveel nieuwe records (niet als in db-records maar als in langste vluchten) zullen er niet komen.quote:Op vrijdag 11 november 2011 19:32 schreef KomtTijd... het volgende:
[ code verwijderd ]
Heeft iemand enig idee hoe ik dat kan verbeteren? Flighttime opslaan in een extra kolom kan natuurlijk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | SELECT floco_flight_id, (int) airplane, (varchar) firstpilot_feu_id, (int) secondpilot_feu_id, (int) starttime, (datetime) landingtime, (datetime) startmethod, (varchar) flighttype, (varchar) club, (boolean) own, (boolean) flighttime, (time) DATE(starttime) AS datum, feu1.data AS firstpilot_name, feu2.data AS secondpilot_name FROM flightdb_flights LEFT JOIN feusers_properties AS feu1 ON (firstpilot_feu_id = feu1.userid) AND (feu1.title = 'realname') LEFT JOIN feusers_properties AS feu2 ON (secondpilot_feu_id = feu2.userid) AND (feu2.title = 'realname') WHERE (YEAR(starttime) = '2011' AND airplane IN ('PH454','PH974','PH1006','PH1210','PH1382','PH1417','PH1433') AND flighttime > '01:05:00') ORDER BY flighttime desc LIMIT 0,10 |
1 2 3 4 5 | userid | title | data 1 | name | piet 2 | name | jan 1 | adres | hoofdstraat 21 3 | name | henk |
1 2 3 | WHERE (YEAR(starttime) = '2011' AND (firstpilot_feu_id = '2' OR secondpilot_feu_id = '2')) ORDER BY starttime |
1 2 | WHERE (DATE(starttime) = '2011-10-30') ORDER BY starttime |
Dat is juist wat ik gedaan heb. Flighttime is nu een eigen kolom met index, terwijl deze eerst met TIMEDIFF on the fly berekend werd. Het verschil in prestaties is alleen marginaal.quote:Op maandag 14 november 2011 11:56 schreef Catbert het volgende:
Je berekent on the fly (huhu) waarden waarop je ordent, dat betekent min of meer dat er een volledige tijdelijke tabel opgebouwd moet worden (zou je waarschijnlijk ook zien in een query explain). Oftewel; bereken die flight-time voor en zet er een index op.
quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | pear_ResultSet Object ( [emptyTimeStamp] => [emptyDate] => [datetime] => [connectionId] => Resource id #25 [fields] => Array ( [id] => 1 [select_type] => SIMPLE [table] => flightdb_flights [type] => range [possible_keys] => flighttime,airplane [key] => flighttime [key_len] => 4 [ref] => [rows] => 466 [Extra] => Using where; Using temporary; Using filesort ) [resultId] => Resource id #248 [_currentRow] => 0 [_numOfRows] => 3 [_numOfFields] => 10 [fetchMode] => 1 [EOF] => [record] => Array ( ) ) |
Dat leek mij ook, daarom is het ook irritant dat het zo traag gaat.quote:Sowieso is een query op 10k records complete peanuts.
Nou waarom het zo traag gaat is wel duidelijk. De vraag is waarom hij voor dat execution plan kiest...quote:Op maandag 14 november 2011 12:20 schreef KomtTijd... het volgende:
Dat leek mij ook, daarom is het ook irritant dat het zo traag gaat.
de explain is van de query exact zoals ik hierboven gepost heb (dus niet die twee varianten). Mooier weergeven zou kunnen maar ik wist/weet amper waar ik naar zit te kijken. Heb exlpain nog niet eerder gebruikt.quote:Op maandag 14 november 2011 12:52 schreef GlowMouse het volgende:
Waar is die explain van en kan je dat niet mooier weergeven?
>> De tabel flightdb_flights laat zich raden.
niet waar, bovendien zijn er meer tabellen
1 2 3 4 5 6 7 8 9 10 11 12 13 | 1 floco_flight_id bigint(19) 2 airplane varchar(80) 3 firstpilot_id int(11) 4 secondpilot_id int(11) 5 starttime datetime 6 landingtime datetime 7 startmethod varchar(20) 8 flighttype varchar(20) 9 club tinyint(1) 10 own tinyint(1) 11 firstpilot_feu_id int(11) 12 secondpilot_feu_id int(11) 13 flighttime time |
1 2 3 4 | 1 id int(11) 2 userid int(11) 3 title varchar(100) 4 data longtext |
Niet bepaald, denk dat je dan nog 90% over hebt.quote:>> AND airplane IN ('PH454','PH974','PH1006','PH1210','PH1382','PH1417','PH1433')
hoe selectief is dat?
Je hebt het hier dus over "using temporary", neem ik aan?quote:Op maandag 14 november 2011 13:01 schreef Catbert het volgende:
[..]
Nou waarom het zo traag gaat is wel duidelijk. De vraag is waarom hij voor dat execution plan kiest...
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |