abonnement Unibet Coolblue Bitvavo
  donderdag 10 november 2011 @ 14:29:13 #31
75592 GlowMouse
l'état, c'est moi
pi_104201757
met geheugentekort kan innodb juist heel goed presteren mbv page-compressie
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_104224137
Ik kom ergens niet uit.

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 heb een tabel 'buttons' met button_id en id en een tabel 'pagina' met id, title en link.
Nu wil ik de buttons laten zien en dan uit de tabel 'pagina' de juiste title en link geven bij het id dat overeenkomt met die in de tabel 'buttons'.

Blijf een foutmelding krijgen. Het zit in de Query maar ik snap niet waar.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
  donderdag 10 november 2011 @ 22:19:10 #33
75592 GlowMouse
l'état, c'est moi
pi_104224367
FROM 'pagina'

zonder quotes.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_104224538
Helaas geen verandering. Ik ben echt een ramp met JOIN.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
  donderdag 10 november 2011 @ 22:23:46 #35
75592 GlowMouse
l'état, c'est moi
pi_104224649
wat is 'de foutmelding' dan?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_104224725
Hij laat mijn if(!$result){ echo "foutmelding" }; zien. Hij kan de query dus niet uitvoeren.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
  donderdag 10 november 2011 @ 22:26:00 #37
75592 GlowMouse
l'état, c'est moi
pi_104224790
zo debug je geen queries
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_104225071
Als ik de query draai in mijn phpMyAdmin werkt het gewoon.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
pi_104225257
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. :') !!!!
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
pi_104225342
:N en dat kan moderator zijn :N :P
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_104225420
quote:
0s.gif Op donderdag 10 november 2011 22:34 schreef Chandler het volgende:
:N en dat kan moderator zijn :N :P
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.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
pi_104225526
quote:
9s.gif 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. :') !!!!
keer tijd om je db class uit te breiden? Zodat hij dit soort dingen aangeeft.
pi_104226354
quote:
1s.gif 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.
Dat heeft niet perse zo veel zin want de hele database class stond nog niet op die pagina.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
  donderdag 10 november 2011 @ 23:00:03 #44
75592 GlowMouse
l'état, c'est moi
pi_104226792
quote:
14s.gif 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.
zulke dingen doe je ook in je db-class
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_104226992
quote:
10s.gif 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.
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. :)
pi_104227401
Ah duidelijk. Toch maar eens naar kijken.
Ik weet niks van Hindoes. Wel van Samoerai en andere dingen.
pi_104258465
1
2
3
4
5
SELECT
  TIME_FORMAT(TIMEDIFF(landingtime,starttime),"%k:%i") 
    AS flighttime
ORDER BY flighttime  <<<<<<---------------
LIMIT 0,10
Is dit een garantie voor een trage query of moet ik een andere oorzaak zoeken waarom mijn query 8 seconden nodig heeft?

(de echte query is wel wat langer maar dit is het enige verschil met een andere query die binnen 0,03 seconden klaar is)

-edit-
Als ik de TIME_FORMAT eruit haal laat hij geen significante verbetering zien. Als ik de ORDER BY eruit haal wel. Het ligt dus aan het sorteren na een TIMEDIFF, dat kost gewoon tijd.
Heeft iemand enig idee hoe ik dat kan verbeteren? Flighttime opslaan in een extra kolom kan natuurlijk, maar misschien is er een makkelijkere optie?

[ Bericht 10% gewijzigd door KomtTijd... op 11-11-2011 20:32:28 ]
  zaterdag 12 november 2011 @ 12:53:35 #48
75592 GlowMouse
l'état, c'est moi
pi_104282605
quote:
0s.gif 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
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.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_104291609
Dan denk ik dat ik liever voor dat eerste gaat. Worden de andere query's waarschijnlijk ook weer een tikkeltje sneller van.
pi_104318028
Pfft ik ben een hele poos bezig geweest, wel een hoop geleerd over het gebruik van indexen (die index op (firstpilot,secondpilot) had ik veel eerder moeten doen) maar uiteindelijk niet het gewenste resultaat gehaald, de query duurde op zijn minst nog 7 seconden...
Uiteindelijk heb ik een andere optimalisatie gedaan: WHERE flighttime > '01:05:00'. Dat limiteert het aantal vluchten gigantisch aangezien we meestal een maximum vluchtduur van 1 uur aanhouden. De "rondje-om-de-kerk" vluchten komen op deze manier dus niet meer in de top 10, maargoed dat is ook niet zo boeiend.
  zondag 13 november 2011 @ 16:00:45 #51
75592 GlowMouse
l'état, c'est moi
pi_104319192
je kunt ook je query en je tabellen hier posten
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_104346643
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
Dit is de query. De tabel flightdb_flights laat zich raden. Voor de duidelijkheid heb ik de datatypes er even achter gezet. Deze heeft nu een index op (firstpilot_feu_id, secondpilot_feu_id), op (flighttime) en op (starttime). Er zitten nu een goeie 10.000 records in, ik reken op ongeveer 5000 records per jaar.

feusers_properties had ik al eens gepost, deze heb ik een index gegeven op (userid,title):
1
2
3
4
5
userid | title | data
1      | name  | piet
2      | name  | jan
1      | adres | hoofdstraat 21
3      | name  | henk

-edit-
een andere query die veel vaker voorkomt is dezelfde, maar dan eindigend op:
1
2
3
WHERE (YEAR(starttime) = '2011' 
    AND (firstpilot_feu_id = '2' OR secondpilot_feu_id = '2'))
ORDER BY starttime
en ook:
1
2
WHERE (DATE(starttime) = '2011-10-30')
ORDER BY starttime
waarbij de datum en userid uiteraard kunnen verschillen. Deze query's zijn allebei wel snel.

[ Bericht 10% gewijzigd door KomtTijd... op 14-11-2011 11:57:07 ]
  maandag 14 november 2011 @ 11:56:48 #53
58834 Catbert
The evil HR Director.
pi_104347349
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.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
pi_104347445
quote:
0s.gif 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.
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.

Ik heb ook geprobeerd wat het verschil is tussen WHERE YEAR(starttime) = '2011' en WHERE starttime BETWEEN 2011-01-01 AND 2011-12-31, maar dat is ook nihil/onmeetbaar.
  maandag 14 november 2011 @ 12:03:50 #55
58834 Catbert
The evil HR Director.
pi_104347548
Doe eens een query explain?

Sowieso is een query op 10k records complete peanuts.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
pi_104348014
quote:
0s.gif Op maandag 14 november 2011 12:03 schreef Catbert het volgende:
Doe eens een query explain?
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] => &nbsp;
    [emptyDate] =>  &nbsp;
    [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
        (
        )

)
ik zit me nog even in te lezen hoe ik dit moet vertalen...

-edit- voor de scherpe lezers: in de testdatabase stond dus ook nog een index op airplane.
Ik heb een index gemaakt op (airplane,starttime,flighttime), dat kan maar dan gebruikt 'ie nog steeds liever de index op flighttime.

quote:
Sowieso is een query op 10k records complete peanuts.
Dat leek mij ook, daarom is het ook irritant dat het zo traag gaat.

[ Bericht 1% gewijzigd door KomtTijd... op 14-11-2011 12:37:58 ]
  maandag 14 november 2011 @ 12:52:18 #57
75592 GlowMouse
l'état, c'est moi
pi_104348802
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

>> AND airplane IN ('PH454','PH974','PH1006','PH1210','PH1382','PH1417','PH1433')
hoe selectief is dat?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  maandag 14 november 2011 @ 13:01:17 #58
58834 Catbert
The evil HR Director.
pi_104349047
Ik snap echt niet waarom MySQL een tijdelijke tabel nodig denkt te hebben hiervoor. Rare query explain trouwens, probeer eens "EXPLAIN EXTENDED"?

Ben wel blij dat we hier vooral met MSSQL werken zeg...

quote:
0s.gif 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.
Nou waarom het zo traag gaat is wel duidelijk. De vraag is waarom hij voor dat execution plan kiest...
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
pi_104349390
Ah, ik heb gevonden wat het verschil maakt! De index op (userid,data) in de tabel feusers_properties! Dan valt ook ineens de "Using temporary; Using filesort" weg uit de explain.
Ik heb nu WHERE (flighttime > 01:05:00) weer uit de query gehaald, met index duurt de query nu rond de 0,006 seconden, zonder nog steeds 7-8 seconden.

Helaas probeer ik dat nu pas zónder die WHERE (flighttime > 01:05:00), waardoor het me nog niet opgevallen was. Ik was gisteren de boel al online aan het zetten (en had dus de benchmarks weggehaald).

quote:
0s.gif 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

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.
Wat zou je nog meer willen weten over flightdb_flights? En meer tabellen... Ja die zijn er, maar zitten niet in deze query. Moet ik dan mijn hele database posten? Lijkt me een beetje overdreven...
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
dit is écht de hele tabel dan.
1
2
3
4
1     id     int(11)             
2     userid     int(11) 
3     title     varchar(100)     
4     data     longtext
En dit de hele tabel feusers_properties
quote:
>> AND airplane IN ('PH454','PH974','PH1006','PH1210','PH1382','PH1417','PH1433')
hoe selectief is dat?
Niet bepaald, denk dat je dan nog 90% over hebt.
pi_104349754
quote:
0s.gif 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...
Je hebt het hier dus over "using temporary", neem ik aan?
Dan weet ik dat ik dat voortaan in de gaten moet houden.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')