[PHP/MySQL] Timeout probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit hier met een raar probleem.

Ik heb een mysqldatabase met +- 25000 producten die onderverdeeld zijn in categorieën.
Nu wil ik via een menutje deze aanroepen en dit lukt als er niet teveel items inzitten.
Vanaf dat er echt veel beginnen in te zitten doe hij lastig, hij runt het script en displayed dan niets, pas als ik in IE op stop druk dan laat hij de opgehaalde records zien, maar onvolledig.

Ik heb al set_time_limit(0) staan en mijn keep_alive is ook aangepast, maar zonder resultaat.

Verder gebruik ik apache nog.

Dit is het stukje code voor sql:

code:
1
$subquery = "SELECT * FROM producten WHERE child LIKE '" . $_GET["c2"] . "%' AND sub LIKE '" . $_GET["c3"] . "%' AND publishername='" . $row["publishername"] . "'";


Dit is een goed voorbeeld:
http://users.pandora.be/tompcstore/goed.JPG

Slecht, zie onderaan dat er die blauwe lijn niet is (dus niet volledig het script doorlopen), ik krijg dit ook pas te zien als ik op de stop-knop heb gedrukt:
http://users.pandora.be/tompcstore/slecht.JPG

Hetgeen ik juist geprobeerd heb is een aantal items in de probleemcategorien te verwijderen, maar helaas blijft hij hangen...

Heeft iemand raad ?

Acties:
  • 0 Henk 'm!

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 21:50
Ik denk dat er een plaat voor je script zit: [rml][ PHP/MYSQL] Timeout-probleem[/rml]
Modbreak:TR-knopje stuk?

[ Voor 54% gewijzigd door NMe op 25-04-2005 16:37 ]

Was advocaat maar vindt het juridische nog steeds leuk


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

En heb je al je indexens eens bekeken? Een index op child, sub en publishername gaat waarschijnlijk wonderen doen voor het ophalen van de data in een tabel van 25000 records.

Overigens, zou je misschien ook de opzet van je DB eens kunnen posten? Ik weet niet precies wat child en sub zijn maar ik kan me voorstellen dat het qua normalisatie niet helemaal klopt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn databasestructuur wordt gewoon uit het textbestand van de leverancier gehaald en dmv mijn php-script in mijn sql-database gestoken.

Daar staan dus alle items in en elk item heeft een hierarchie van 3

Vb Acer 17inch AL1713m -> parent: Peripherals -> child: Monitors & Displays -> sub: 17- inch monitoren

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Misschien kun je iets duidelijker aangeven hoe je tabellen er uit zien, a la:
code:
1
2
tabel producten:
id | parent | child | sub |

Ik mag verder hopen dat er meer tabellen relevant zijn. Je database lijkt me namelijk niet erg optimaal wat ik uit je post kan opmaken.

Wat me opvalt aan genoemde query is dat je hem $subquery noemt en er een referentie naar $row inzit. Queries in queries loopen kan vaak prima verholpen worden door joins te gebruiken, met de nodige performancewinst vandien.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn tabel producten ziet er zo uit:

id_product | publishername | description | stock | price | listprice | promoprice | fromday | untilday | picture | parent | child | sub | date | extra | art_id

VB:
0020K1209 (=manufacturer nr)| Lexmark | C510N/NON 128MB 2400dpi 30ppm A4 color | 3 | 610 | 820 | 610 | 2005-04-04 | 2005-05-01 | http://lexmark.betterbuybrands.com/images/products.jpg | Peripherals | Printers | Laser printers | 2005-04-04 11:42:40 | / | 00921792 (=uniek nr van distri)

En ik gebruik idd subquerries voor alles uit mijn database te halen.
Ik haal eerst de fabricantnamen op (1e querrie) en dan laat ik per fabricant alle items ervan afdrukken. Dit herhaald hij dan voor elke fabricant hierin.

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 23:39
Wat mij als eerst opvalt (vreemd dat het nog niet genoemd is?) is dat je een select * doet, terwijl je maar 5 of 6 kolommen daadwerkelijk gebruikt (naam, aantal, prijs etc ). Als je alleen de kolommen ophaalt die je ook daadwerkelijk nodig hebt ipv alle 16 scheelt dat ook al aanzienlijk in performance.

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 20:52
sig69 schreef op dinsdag 26 april 2005 @ 08:58:
Wat mij als eerst opvalt (vreemd dat het nog niet genoemd is?) is dat je een select * doet, terwijl je maar 5 of 6 kolommen daadwerkelijk gebruikt (naam, aantal, prijs etc ). Als je alleen de kolommen ophaalt die je ook daadwerkelijk nodig hebt ipv alle 16 scheelt dat ook al aanzienlijk in performance.
Scheelt helemaal niets. Ik heb het hier zojuist uitgeprobeerd op een tabel met ongeveer 100.000 records.

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 23:39
mjax schreef op dinsdag 26 april 2005 @ 09:03:
[...]


Scheelt helemaal niets. Ik heb het hier zojuist uitgeprobeerd op een tabel met ongeveer 100.000 records.
Dat is toch vreemd. Ik kan me herrinneren dat we vroeger in een project (toen ik net begon...) ook een query draaide met select * die ongeveer 10 seconden draaide, na het aanpassen minder dan 1. Die tabel was wel iets groter overigens, en MS SQL.

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op dinsdag 26 april 2005 @ 08:47:
Mijn tabel producten ziet er zo uit:

id_product | publishername | description | stock | price | listprice | promoprice | fromday | untilday | picture | parent | child | sub | date | extra | art_id

VB:
0020K1209 (=manufacturer nr)| Lexmark | C510N/NON 128MB 2400dpi 30ppm A4 color | 3 | 610 | 820 | 610 | 2005-04-04 | 2005-05-01 | http://lexmark.betterbuybrands.com/images/products.jpg | Peripherals | Printers | Laser printers | 2005-04-04 11:42:40 | / | 00921792 (=uniek nr van distri)

En ik gebruik idd subquerries voor alles uit mijn database te halen.
Ik haal eerst de fabricantnamen op (1e querrie) en dan laat ik per fabricant alle items ervan afdrukken. Dit herhaald hij dan voor elke fabricant hierin.
En hoe zit het nu met je indexen? En waarom sla je de publishername op i.p.v. een publisher ID welke naar de tabel publisher verwijst? (lees: ben je nu al aan het normaliseren geslagen? ;) ).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb net geprobeerd te normaliseren volgens dit voorbeeld: http://www.phphulp.nl/php/tutorials/3/150/

Maar volgens mij hoef ik nergens iets aan te passen ...
Mag het niet op de manier dat ik nu doe ? Is dit echt mijn bottleneck ?

[ Voor 64% gewijzigd door Verwijderd op 26-04-2005 16:39 ]

Pagina: 1