Toon posts:

[MySQL] Efficiëntere query om te zoeken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een tabel met 60 velden. Bij een zoekopdracht moeten AL deze 60 velden bekeken worden. Momenteel heb ik een query generator geschreven die de volgende query creëert:
code:
1
SELECT * FROM tabel WHERE veld1 LIKE '%zoek%' OR veld2 LIKE '%zoek%' OR etc...
En dan uiteraard het aantal velden herhalen tot er veld60 staat. Je begrijpt; deze query wordt erg lang!!

Is er wellicht een mogelijkheid om in de HELE tabel te zoeken en toch een eenvoudige query te gebruiken?

  • Noork
  • Registratie: Juni 2001
  • Niet online
Misschien iets met een subselect.

zoiets: select * from table where zoek=(select * from table)

Verwijderd

Topicstarter
Noork schreef op 09 februari 2004 @ 22:54:
Misschien iets met een subselect.

zoiets: select * from table where zoek=(select * from table)
Aangezien ik met searchpatterns werk; is een subselect niet te gebruiken. Een subselect is alleen te gebruiken wanneer ik exact zoek op hetgeen wat in een bepaald veld staat. En dus geen één teken anders.

Verwijderd

MySQL doet (nog) geen subselects.

Je kunt toch ook een soort zoektabel bouwen:
- id;
- orig_table_id;
- veldx

Indexeren op veldx, je krijgt dan 60x zoveel entries in je tabel

Maar waarom zitten er eigenlijk 60 velden in je table :?, ik kan me zo geen toepassing voorstellen waarbij dat nodig is.

  • Vae Victis
  • Registratie: April 2001
  • Laatst online: 25-05 21:56

Vae Victis

Dark Lord of the Sith

Je zou dit eens kunnen bekijken: http://www.mysql.com/doc/en/Fulltext_Search.html
Daar zou het al een stuk beter/sneller mee moeten werken. (zelf nog niet mee getest..)

Verwijderd

Topicstarter
Vae Victis schreef op 09 februari 2004 @ 23:04:
Je zou dit eens kunnen bekijken: http://www.mysql.com/doc/en/Fulltext_Search.html
Daar zou het al een stuk beter/sneller mee moeten werken. (zelf nog niet mee getest..)
Aan FULLTEXT search zitten nogal veel eisen. Namelijk dat de search pattern ook minimaal 4 tekens lang moet zijn; en dat is niet altijd het geval in mijn script...
Maar waarom zitten er eigenlijk 60 velden in je table , ik kan me zo geen toepassing voorstellen waarbij dat nodig is.
De database is geheel volgens de regeltjes genormaliseerd; maar er blijft 1 tabel over die wél zoveel velden vereist.... Ik weet het; vond het zelf ook veel... maar deze applicatie werkt zo toch echt het best!

Verwijderd

Topicstarter
Verwijderd schreef op 09 februari 2004 @ 23:03:
MySQL doet (nog) geen subselects.

Je kunt toch ook een soort zoektabel bouwen:
- id;
- orig_table_id;
- veldx

Indexeren op veldx, je krijgt dan 60x zoveel entries in je tabel
Dit ziet er idd wel als een bruikbare mogelijkheid uit! Echter 2 vraagjes:

1. Hoe zorg ik ervoor dat deze zoektabel t.a.t. identiek is aan de originele tabel? Deze tabel wordt meer dan 2.500 maal per dag gewijzigd.
2. Werkt dit sneller dan de LIKE query die ik zelf had gecreëerd?

  • Vae Victis
  • Registratie: April 2001
  • Laatst online: 25-05 21:56

Vae Victis

Dark Lord of the Sith

Verwijderd schreef op 09 februari 2004 @ 23:08:
De database is geheel volgens de regeltjes genormaliseerd; maar er blijft 1 tabel over die wél zoveel velden vereist.... Ik weet het; vond het zelf ook veel... maar deze applicatie werkt zo toch echt het best!
Is het dan geen optie om die textvelden in 1 table te gooien met 2 velden.
Waarvan 1 de ID en de andere de veld met text.
En in je huidige table doe je ipv 60x een veld met text, 60x een veld met een id die verwijst naar de andere table.
Zo hoef je maar in 1 veld te zoeken.
Ongeveer wat : Verwijderd in "[MySQL] Efficiëntere query om te zoeken" bedoelt

Verwijderd

Topicstarter
Ook wel een goed idee eigenlijk; alleen lijkt het mij niet aanbevolen om de database zó drastisch om te gooien kwa structuur.
Pagina: 1