[MySQL] Text als index van tabel

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008
  • Reageer

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Als ik probeer een een tekst als index te maken geeft phpMyAdmin mij deze foutmelding:
ALTER TABLE `files` ADD INDEX(`file`)

MySQL retourneerde: BLOB column 'file' used in key specification without a key length
Wat is hier precies mis.
Ik moet namelijk 'file' als index hebben, omdat de select query's dan sneller gaan op die tabel.

Iemand een idee, alvast bedankt. :)

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • tomato
  • Registratie: November 1999
  • Niet online
MySQL kan geen complete TEXT of BLOB column indexeren, dit zou ook nogal nutteloos zijn. Je kunt wel een bepaald aantal karakters uit een TEXT of BLOB column laten indexeren:
code:
1
ALTER TABLE `files` ADD INDEX(file(100))

MySQL zal nu indexeren tot maximaal 100 karakters.

Waarom wil je dit eigenlijk? Lijkt me eigenlijk niet zo'n strak plan. Wil je snel kunnen zoeken in die column, misschien dan eens naar FULL TEXT SEARCH kijken?

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Het zit namelijk zo.
Ik heb een log file waar een groot aantal files in staan, en veel dubbele. Dit wil ik in een MySQL tabel hebben, maar dan elke filename 1x voor laten komen met in een kolom verder hoevaak deze voorkomt. Maar bij het door lopen van de log files moet ik steeds kijken of deze al voorkomt in de tabel, is dit zo, dan tel ik er 1 bij op, is dit niet zo dan voeg ik hem toe.
Maar omdat het om veel data gaat moet dit uiteraard zo snel mogelijk.

Ik dacht dat dit een snelle manier was, maar als iemand een betere heeft hoor ik dit graag.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-04 22:58

Janoz

Moderator Devschuur®

!litemod

Een bestands naam hoef je toch niet in een blob op te slaan?? Lijkt mij een beetje overkill.. Of heb je daar de hele file instaan... Een varchar met lengte x lijkt me meer dan genoeg (en daar kun je wel een index op zetten)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Maar is een index wel de goeie oplossing, zal mijn procedure daardoor sneller worden?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik zit met precies hetzelfde probleem en nutteloos is het in mijn geval zeker niet. Ik wil inderdaad het volledige path opslaan en heb in een andere kolom de drive-letter staan. Nu probeerde ik een UNIQUE INDEX te zetten over die twee kolommen, maar krijg precies dezelfde error. (het moge duidelijk te zijn dat ik op die manier wil waarborgen dat er geen dubbele entries in de database komen)
Is hier echt geen mogelijkheid voor binnen mysql?

voor de duidelijkheid: dit is wat ik geprobeerd heb:
MySQL:
1
CREATE UNIQUE INDEX DiskPath ON table (Disk(25),PathAndFile(255));

(PathAndFile is een TEXT kolom)
Dit werkt, maar zodra ik een groter getal voor PathAndFile opgeef gaat het fout. En zo heb ik er niets aan

Ik zat zelf aan een md5 hash te denken, maar het zou daarmee natuurlijk kunnen gebeuren dat twee verschillende paths dezelfde hash opleveren. En dat mag uiteraard niet.

Iemand een idee?

[ Voor 19% gewijzigd door marty op 18-01-2006 15:03 ]


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
marty schreef op woensdag 18 januari 2006 @ 14:57:
Ik zit met precies hetzelfde probleem en nutteloos is het in mijn geval zeker niet. Ik wil inderdaad het volledige path opslaan en heb in een andere kolom de drive-letter staan. Nu probeerde ik een UNIQUE INDEX te zetten over die twee kolommen, maar krijg precies dezelfde error. (het moge duidelijk te zijn dat ik op die manier wil waarborgen dat er geen dubbele entries in de database komen)
Is hier echt geen mogelijkheid voor binnen mysql?

Ik zat zelf aan een md5 hash te denken, maar het zou daarmee natuurlijk kunnen gebeuren dat twee verschillende paths dezelfde hash opleveren. En dat mag uiteraard niet.

Iemand een idee?
als je een hash van je berg data maakt en een volgnummer als int in een ander veld doet dan?
gooi je je PK op 2 velden

[ Voor 7% gewijzigd door BasieP op 18-01-2006 15:01 ]

This message was sent on 100% recyclable electrons.


Verwijderd

Zit er wel een id in die tabel, die zou je wel kunnen indexeren, en een distinct querie uitvoeren op die tabel

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
die oplossingen gaan niet werken.
De data moet erg vaak automatisch geupdate worden. en dubbele entries moeten er op die manier gewoon buiten vallen. en het zijn teveel records om allemaal distinct queries uit te gaan voeren
Pagina: 1