Seite 1 von 1
Spalte als primary oder varchar
Verfasst: 15.11.2008, 11:33
von smilla
Hi,
es geht darum, dass meine tabelle im schnitt bis zu 5-10 millionen einträge hat. derzeit habe ich eine id mit autoincrement als primary key in planung. allerdings finde ich dies nicht so gut, da ich diesen key gar nicht nutze. ich habe einen varchar 255 als index, über den ich immer zugreife. wenn mehr und mehr daten kommen, sehe ich hier probleme.
ein primary key ist ja ca. 10x schneller als ein index. ist das auch so, wenn der primary key ein varchar 255 ist?
dies müsste dann ja eigentlich besser sein? oder ist davon abzuraten?
smilla
Verfasst: 15.11.2008, 11:36
von Airport1
prinzipiell duerfte ein
autoincrement primary key mit
datentyp integer oder dessen kleineren oder groesseren pendants
immer das schnellste sein, und ist wohl auch meist einem primary key mit (var)char vorzuziehen. ansonsten bleiben einem diverse optimier-untersuchen mit EXPLAIN oder dem einlesen in wie mysql die indexe aufbaut (hash usw.).
Re: Spalte als primary oder varchar
Verfasst: 16.11.2008, 11:47
von Mork vom Ork
smilla hat geschrieben:derzeit habe ich eine id mit autoincrement als primary key in planung. allerdings finde ich dies nicht so gut, da ich diesen key gar nicht nutze.
Damit erübrigt sich doch schon die ganze Problematik. Ein Index, den du nicht nutzt, ist überflüssig und bremst dich nur noch weiter aus, schließlich muss auch er verwaltet werden.
Es wäre lediglich überlegenswert, ob du deine VARCHAR-Spalte nicht vielleicht in einen Zahltyp umwandeln kannst (ich denke da an die Hexdarstellung, wie sie gerne bei MD5 & Co. benutzt wird).
ein primary key ist ja ca. 10x schneller als ein index.
Das kommt wohl eher darauf an, was „Index“ genau ist. Wenn für ihn die gleichen Bedingungen gelten wie für den Primary Key (Eindeutigkeit, keine NULL-Werte, erste Wahl in der Index-Liste), müssten sie logischerweise gleich schnell sein.
So oder so, falls du MySQL verwendest, frage besser im MySQL-Forum nach:
https://forums.mysql.com/list.php?24.
Verfasst: 17.11.2008, 07:58
von nerd
was willst du denn genau machen? wieviele verschiedene werte kann denn deine varchar-haben; sind das vielleicht nur eine handvoll werte die mehrfach vorkommen koennen, oder alle verschieden, willst du ueber diese varchar-spalte auf die zeilen zugreifen oder wie oder was? willst du ip-adressen als index benutzen?
wenns eine grosse tabelle ist dann ist es manchmal besser statt 'varchar' ein 'char' mit fixer laenge in allen entsprechenden zeilen zu verwenden - einfach weil die db dann weiss wie lang jede zeile ist und wenn man dann den index hat kann man die startposition in der datei mit multiplikation rausfinden: index abfrage->gesuchte zeile ist der 10. eintrag, zeilenlaenge in der tabelle ist immer 300 bytes => lies aus tabelle von zeichen 3000 bis 3299.