abonnement Unibet Coolblue Bitvavo
pi_35651263
Meesterlijk, vanavond eens proberen
  FOK!-Schrikkelbaas donderdag 2 maart 2006 @ 21:01:35 #227
1972 Swetsenegger
Egocentrische Narcist
pi_35656214
Ik heb de volgende tabellen, waarbij cursieve kolommen FK's zijn (duh).

produkten:
  • product_id
  • article_code
  • name
  • etc

    users
  • user_id
  • name
  • address
  • etc

    orders
  • order_id
  • user_id
  • etc

    order_content
  • content_id
  • order_id
  • product_id
  • etc

    Meest gebruikte queries zijn niet zo spannend:
    1
    2
    3
    4
    5
    6
    <?php
    $query
    ="SELECT *
                   FROM produkten
                   WHERE product_menu="
    .$_GET['id']."  
                   ORDER BY first_price ASC, product_id DESC"
    ;
    ?>


    Immers ga je de tabellen pas aan elkaar koppelen na een bestelling, daarbij krijg je queries zoals deze:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $query
    ="SELECT
            oc.number,
            p.articelcode,
            p.name,
            oc.giftwrap,
            p.first_price,
            p.second_price
            FROM orders o
            INNER JOIN order_content oc ON oc.order_id = o.order_id
            INNER JOIN produkten p ON p.product_id = oc.product_id
            INNER JOIN users u ON u.user_id = o.user_id
            WHERE o.order_id ="
    .$_GET['order']." && u.name='".$_SESSION['name']."'";
    ?>



    Eerste vraag:
    Hebben indices in deze situatie zin? De meeste queries zijn redelijk straight forward, alleen bij bestellingen wat gecompliceerder, maar die komen ook maar mondjesmaat voor.

    Tweede vraag:
    Laten we gemakshalve even aannemen dat indices relevant zijn, van welke kolommen moet ik dan indices maken om performance te winnen?

    Mijn boerenverstand zegt van alle FK's in alle tabellen dus orders.user_id, order_content.order_id en order_content.product_id.
    Maar... klopt dat wel? En kan iemand ook helder onder woorden brengen waarom?
  •   donderdag 2 maart 2006 @ 21:02:23 #228
    51748 H4ze
    wait...what?
    pi_35656247
    Ik zoek me een ongeluk, maar waar kan ik in godsnaam het maximale aantal connecties van mysql aanpassen? Op internet vind ik steeds /etc/my.cnf, maar ik ben geloof ik hardstikke blind....
    *BURP*
      FOK!-Schrikkelbaas donderdag 2 maart 2006 @ 21:03:44 #229
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35656306
    quote:
    Op donderdag 2 maart 2006 21:02 schreef H4ze het volgende:
    Ik zoek me een ongeluk, maar waar kan ik in godsnaam het maximale aantal connecties van mysql aanpassen? Op internet vind ik steeds /etc/my.cnf, maar ik ben geloof ik hardstikke blind....
    php.ini?
      donderdag 2 maart 2006 @ 21:08:21 #230
    51748 H4ze
    wait...what?
    pi_35656471
    quote:
    Op donderdag 2 maart 2006 21:03 schreef Swetsenegger het volgende:

    [..]

    php.ini?
    Ik ben iets aan 't maken met mysql en JSP/Servlets, dus denk niet dat de php.ini er veel mee te maken heeft. Thnx voor 't snelle antwoord iig. Maar je moet toch gewoon via de mysql commandline iets kunnen opgeven?
    *BURP*
      FOK!-Schrikkelbaas donderdag 2 maart 2006 @ 21:11:09 #231
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35656570
    quote:
    Op donderdag 2 maart 2006 21:08 schreef H4ze het volgende:

    [..]

    Ik ben iets aan 't maken met mysql en JSP/Servlets, dus denk niet dat de php.ini er veel mee te maken heeft. Thnx voor 't snelle antwoord iig. Maar je moet toch gewoon via de mysql commandline iets kunnen opgeven?
    Nee dan heeft php er niets mee te maken
    http://dev.mysql.com/doc/refman/4.1/en/too-many-connections.html Staat hier wat bij?
      donderdag 2 maart 2006 @ 21:12:59 #232
    51748 H4ze
    wait...what?
    pi_35656649
    quote:
    Op donderdag 2 maart 2006 21:11 schreef Swetsenegger het volgende:

    [..]

    Nee dan heeft php er niets mee te maken
    http://dev.mysql.com/doc/refman/4.1/en/too-many-connections.html Staat hier wat bij?
    jep al gelezen

    Stond in de reacties wel 1 iets bij:

    You can increase this value in main config file (e.g., /etc/my.cnf) using this syntax:

    [mysqld]
    set-variable=max_connections=250

    Dus ik heb in de commandline '--set-variable=max_connections=250'. Hij gaf dan geen error ofzo, maar ook niet dat het nu veranderd was....
    *BURP*
      FOK!-Schrikkelbaas donderdag 2 maart 2006 @ 21:16:39 #233
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35656781
    quote:
    Op donderdag 2 maart 2006 21:12 schreef H4ze het volgende:

    [..]

    jep al gelezen

    Stond in de reacties wel 1 iets bij:

    You can increase this value in main config file (e.g., /etc/my.cnf) using this syntax:

    [mysqld]
    set-variable=max_connections=250

    Dus ik heb in de commandline '--set-variable=max_connections=250'. Hij gaf dan geen error ofzo, maar ook niet dat het nu veranderd was....
    en als je my.cnf file gewoon opent?
    pi_35656843
    Leuk en aardig dat AppServ maar het werkt nog steeds niet. En nu kan ik totaal niet vinden waar ik in mn MySQL command kan komen. MySQLAdmin opent in DOS en is in 1 sec weer weg
    Dus nu kan ik helemaal niks meer
    pi_35656852
    Fuck it, morgen weer een dag.
      FOK!-Schrikkelbaas donderdag 2 maart 2006 @ 21:20:18 #236
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35656922
    quote:
    Op donderdag 2 maart 2006 21:18 schreef DaFan het volgende:
    Leuk en aardig dat AppServ maar het werkt nog steeds niet. En nu kan ik totaal niet vinden waar ik in mn MySQL command kan komen. MySQLAdmin opent in DOS en is in 1 sec weer weg
    Dus nu kan ik helemaal niks meer
    Nou, dan weet ik niet wat je doet, want appserv is 3 keer next klikken, je files in de www directory zetten en openen met localhost/filename.php

    Meer valt er niet te configureren.
    Je hebt natuurlijk WEL eerste je voorgaande sql en php config gedelete.

    -edit- en wat ga je uberhaupt in MySQL command doen? Ga naar localhost/phpmyadmin.
    -edit2- Ow wacht, je moet een user aanmaken enzo http://www.phpfreakz.nl/artikelen.php?aid=62
    -edit3- Hoewel die standaard op root zonder password staat, en phpmyadmin daarmee moet kunnen verbinden.

    [ Bericht 5% gewijzigd door Swetsenegger op 02-03-2006 21:42:26 ]
      donderdag 2 maart 2006 @ 21:20:23 #237
    51748 H4ze
    wait...what?
    pi_35656926
    Ja ik was dus extreem scheef, kon die cnf file eerst niet vinden Krijg je van al de godganze dag zitten programmeren is nu opgelost

    Thnx iig
    *BURP*
    pi_35657513
    quote:
    Op donderdag 2 maart 2006 21:01 schreef Swetsenegger het volgende:
    Mijn boerenverstand zegt van alle FK's in alle tabellen dus orders.user_id, order_content.order_id en order_content.product_id.
    Maar... klopt dat wel? En kan iemand ook helder onder woorden brengen waarom?
    Eigenlijk alles waar op gefilterd of gesorteerd wordt. Dus de kolommen die in de join condities worden gebruikt, maar ook die in de where staan. Als er geen idex voor bestaat dan moet de hele tabel gescanned worden.
    Wil iedereen die in telekinese gelooft nu mijn hand op steken?
    | Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
      FOK!-Schrikkelbaas donderdag 2 maart 2006 @ 21:41:43 #239
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35657733
    quote:
    Op donderdag 2 maart 2006 21:36 schreef SuperRembo het volgende:

    [..]

    Eigenlijk alles waar op gefilterd of gesorteerd wordt. Dus de kolommen die in de join condities worden gebruikt, maar ook die in de where staan. Als er geen idex voor bestaat dan moet de hele tabel gescanned worden.
    Oke, dus als stelregel kan je zeggen dat je altijd(?) indices moet maken op foreign keys EN op kolommen welke (vaak) in where statements worden gebruikt, correct?

    Ik las namelijk op mysql.org dat het in sommige gevallen trager kan worden door indices.
    pi_35658279
    quote:
    Op donderdag 2 maart 2006 21:41 schreef Swetsenegger het volgende:

    [..]

    Oke, dus als stelregel kan je zeggen dat je altijd(?) indices moet maken op foreign keys EN op kolommen welke (vaak) in where statements worden gebruikt, correct?
    Niet bij álle foreign keys, maar het is een goede vuistregel ja. Voorbeeldje waarbij het niet moet; als je voor een fotoalbum drie groottes van een bepaalde foto hebt kun je die drie groottes in één record laten verwijzen naar drie foreign records, maar daar hoeft in principe helemaal geen index op omdat je daar nooit op selecteert of sorteert.
    quote:
    Ik las namelijk op mysql.org dat het in sommige gevallen trager kan worden door indices.
    In álle gevallen worden INSERTs trager door indices, en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of niet dus wat dat betreft zal het niet trager worden.
      FOK!-Schrikkelbaas donderdag 2 maart 2006 @ 22:05:08 #241
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35658699
    quote:
    Op donderdag 2 maart 2006 21:55 schreef JeRa het volgende:

    [..]

    Niet bij álle foreign keys, maar het is een goede vuistregel ja. Voorbeeldje waarbij het niet moet; als je voor een fotoalbum drie groottes van een bepaalde foto hebt kun je die drie groottes in één record laten verwijzen naar drie foreign records, maar daar hoeft in principe helemaal geen index op omdat je daar nooit op selecteert of sorteert.
    Nee ok, alleen op kolommen waarop je selecteert of sorteert is een betere benaming.
    quote:
    In álle gevallen worden INSERTs trager door indices, en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of niet dus wat dat betreft zal het niet trager worden.
    Van mysql.org:
    If you need to access most of the rows, it is faster to read sequentially, because this minimizes disk seeks.

    Maar ja, in bovenstaand voorbeeld heb ik regelmatig ALLE product rows nodig. Zijn indexes dan aan te raden of niet?
    pi_35658935
    quote:
    Op donderdag 2 maart 2006 21:55 schreef JeRa het volgende:
    en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of niet
    MySQL staat nou niet echt goed bekend om z'n query optimalisatie kwaliteiten.
    Wil iedereen die in telekinese gelooft nu mijn hand op steken?
    | Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
    pi_35661362
    quote:
    Op donderdag 2 maart 2006 22:05 schreef Swetsenegger het volgende:
    Maar ja, in bovenstaand voorbeeld heb ik regelmatig ALLE product rows nodig. Zijn indexes dan aan te raden of niet?
    In jouw voorbeeld zie ik één query die alle rows aandoet en die sorteert op first_price; die zou je prima kunnen indexeren.
    quote:
    Op donderdag 2 maart 2006 22:10 schreef SuperRembo het volgende:

    [..]

    MySQL staat nou niet echt goed bekend om z'n query optimalisatie kwaliteiten.
    Dat weet ik, ik ga er altijd vanuit dat ze dat in de toekomst nog kunnen verbeteren terwijl de queries hetzelfde blijven. Als het een probleem wordt schakel ik over op een andere DBMS die dat wel kan bepalen
      FOK!-Schrikkelbaas vrijdag 3 maart 2006 @ 08:57:08 #244
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35668673
    quote:
    Op donderdag 2 maart 2006 23:14 schreef JeRa het volgende:

    [..]

    In jouw voorbeeld zie ik één query die alle rows aandoet en die sorteert op first_price; die zou je prima kunnen indexeren.
    [..]

    Dat weet ik, ik ga er altijd vanuit dat ze dat in de toekomst nog kunnen verbeteren terwijl de queries hetzelfde blijven. Als het een probleem wordt schakel ik over op een andere DBMS die dat wel kan bepalen
    First price heb ik inderdaad nu geindexeerd.
    Ik doelde ook op de foreign keys in de andere tabellen. DIe worden mondjes maat in joins gebruikt. Maar in mijn beleving zijn joins zware queries, dus wil ik het maar optimaliseren

    Bedankt weer voor de uitleg
      FOK!-Schrikkelbaas vrijdag 3 maart 2006 @ 11:04:18 #245
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35671495
    Ik heb een mooie query van Super Rembo, welke 3 laatste records per catagorie uit de database trekt.
    Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.

    Ik mag toch aannemen dat dat aan de hoster ligt?
    pi_35671593
    quote:
    Op vrijdag 3 maart 2006 11:04 schreef Swetsenegger het volgende:
    Ik heb een mooie query van Super Rembo, welke 3 laatste records per catagorie uit de database trekt.
    Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.

    Ik mag toch aannemen dat dat aan de hoster ligt?
    Laat eens zien?
      FOK!-Schrikkelbaas vrijdag 3 maart 2006 @ 11:13:37 #247
    1972 Swetsenegger
    Egocentrische Narcist
    pi_35671744
    quote:
    Op vrijdag 3 maart 2006 11:08 schreef Scorpie het volgende:

    [..]

    Laat eens zien?
    De Query?

    1
    2
    3
    4
    5
    6
    7
    SELECT g.genre, g.genre_id, a.title, a.ad_id, a.image, a.price
    FROM genre g
    INNER JOIN ad a ON a.genre = g.genre_id
    INNER JOIN ad a2 ON a2.genre = g.genre_id AND a.ad_id <= a2.ad_id
    GROUP BY a.ad_id
    HAVING COUNT(a2.ad_id) <= 3
    ORDER BY g.genre_id, a.ad_id DESC


    -edit-
    indices op a.ad_id (PK), a.genre, g.genre_id (PK)
    pi_35671770
    quote:
    Op vrijdag 3 maart 2006 11:13 schreef Swetsenegger het volgende:

    [..]

    De Query?
    Wat anders?
    pi_35678562
    quote:
    Op vrijdag 3 maart 2006 11:04 schreef Swetsenegger het volgende:
    Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.
    Dit is een mooi voorbeeld van een query die géén indices gebruikt maar de tweede keer snel wordt door het gebruik van de query cache op de server. Ik zie zo even niet waarom hij ze niet gebruikt.

    Als het goed is zou je door iets te veranderen in één van de tabellen de query uit de query cache kunnen halen, is hij dan weer zo traag?
    pi_35679254
    Hm ik zie zo 1,2,3 niet in waarom hij zo lang moet laden...heel apart. Hoeveel data bevatten de tabellen?
    abonnement Unibet Coolblue Bitvavo
    Forum Opties
    Forumhop:
    Hop naar:
    (afkorting, bv 'KLB')