[SQL] Zoek query duurt 10 sec, was eerst 0.5 sec..?!

Pagina: 1
Acties:

  • source
  • Registratie: Januari 2000
  • Laatst online: 05-06 11:53
Ok, zit met hetvolgende probleem.

Ik wil een zoek query uitvoeren op 3 tables die aan elkaar gerelateerd zijn.

zie hier:

dit zijn ff voorbeeld tables om het wat makkelijker uit te leggen:

Tabel 1: Merk
ID (INT)
Merknaam (VARCHAR)

Tabel 2: Model
ID (INT)
Merkid (INT)
Modelnaam (VARCHAR)

Tabel 3: Details
ID (INT)
Modelid (INT)
Details (TEXT)


Dit is natuurlijk even een voorbeeld,
Maar het probleem is dat de query zo'n 10 sec nodig heeft... beeetje aan de lange kant.
Voordat ik alles had verdeeld in verschillende tabbellen duurde zo'n query een halve sec.
Maar toen was alles nog niet genormaliseerd enzo ect enz..

De query die ik er nu op los laat ziet er nu zo uit, aan daar zal het probleem in liggen:

SELECT Merk.Merknaam, Model.Modelnaam, Details.Details FROM Merk, Model, Details WHERE (Merk.id = Model.Merk.id and Model.id = Details.Modelid and Mer.Merknaam = '$zoekterm' or Model.Modelnaam = '$zoekterm' or Details.Details = '$zoekterm')

Ik heb de belangrijkste rows geindexeerd, dus ik hoop echt dat ik meer snelheid kan winnen als de zoekquery verbeterd kan worden.

Heeft er iemand suggesties?

Diplomacy is the ability to tell a person to go to hell in such a nice way that he looks forward to the trip.


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Vanaf waar voor je de query en met welk programma?

  • source
  • Registratie: Januari 2000
  • Laatst online: 05-06 11:53
sorry, ja... ff vergeten

PHP/MYSQL

Test alles eerst alles op localhost voordat ik het natuurlijk on-line zet. en nu doet ie er dus nog zo lang over.

[ Voor 62% gewijzigd door source op 10-12-2002 20:35 ]

Diplomacy is the ability to tell a person to go to hell in such a nice way that he looks forward to the trip.


  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Eerlijkheids halve heb ik daarvan geen verstand (PHP)

Bedenk even of er toevallig niet een paar keer een query wordt uitgevoerd.
Zeker over een netwerk heb je dan met normale pingtijden zo een fors langere tijd.

<edit>
Je kunt via de console onder linux direct commando's aan je MySQL geven, waarschijnlijk onder windows ook wel. (Welk os draai je trouwens?)

Als je het direct op MySQL loslaat, hoe gaat het dan?
Hoe is he processor belasting?

[ Voor 36% gewijzigd door TheGhostInc op 10-12-2002 20:36 ]


  • source
  • Registratie: Januari 2000
  • Laatst online: 05-06 11:53
nee, heb al gechecked of er een misschien iets te lange query wordt gegenereerd, maar dat is niet zo.... jammergenoeg

Diplomacy is the ability to tell a person to go to hell in such a nice way that he looks forward to the trip.


  • maartenba
  • Registratie: November 2001
  • Laatst online: 27-08 18:48
Effe dit proberen:

SELECT Merk.Merknaam, Model.Modelnaam, Details.Details
FROM Merk, Model, Details
WHERE (Merk.id = Model.Merk.id and Model.id = Details.Modelid and (Mer.Merknaam = '$zoekterm' or Model.Modelnaam = '$zoekterm' or Details.Details = '$zoekterm'))

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Je moet niet zelf indexeren, maar je moet de DB laten bepalen waar de indexen moeten komen.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 00:27

mulder

ik spuug op het trottoir

* mulder vraagt zich af of met INNER JOINs werken sneller zou zijn

oogjes open, snaveltjes dicht


  • source
  • Registratie: Januari 2000
  • Laatst online: 05-06 11:53
maartenba schreef op 10 december 2002 @ 20:38:
Effe dit proberen:

SELECT Merk.Merknaam, Model.Modelnaam, Details.Details
FROM Merk, Model, Details
WHERE (Merk.id = Model.Merk.id and Model.id = Details.Modelid and (Mer.Merknaam = '$zoekterm' or Model.Modelnaam = '$zoekterm' or Details.Details = '$zoekterm'))
maartenba is mijn nieuwe held!

searchtime = 0.3sec!

Dat het antwoord zo simpel is!!...
Heel erg bedankt voor de inspanning jongens!

Diplomacy is the ability to tell a person to go to hell in such a nice way that he looks forward to the trip.


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Waarom is Details een TEXT veld? het is voor de performance dacht ik beter om hier een varchar van te maken.

  • source
  • Registratie: Januari 2000
  • Laatst online: 05-06 11:53
Orphix schreef op 10 december 2002 @ 21:09:
Waarom is Details een TEXT veld? het is voor de performance dacht ik beter om hier een varchar van te maken.
Performance wijs gezien heb je gelijk, maar dit voorbeeld is alleen ter illustratie,

Op de tabellen waar ik de query echt wil uitvoeren zitten nog wat extra rows die meegenomen worden, waaronder ook een TEXT...
maakt voor de opbouw van de query natuurlijk weinig uit.

Diplomacy is the ability to tell a person to go to hell in such a nice way that he looks forward to the trip.

Pagina: 1