Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi mySQL-Schlüsselindex numerisch schneller, als alphanumerisch (https://www.delphipraxis.net/15153-mysql-schluesselindex-numerisch-schneller-als-alphanumerisch.html)

Steffen 22. Jan 2004 18:36


mySQL-Schlüsselindex numerisch schneller, als alphanumerisch
 
Hallo!

Ich überlege gerade, ob ein numerischer Schlüssel in einer mySQL-Tabelle besser ist, als ein alphanumerischer?
Ich habe eine Tabelle:

Delphi-Quellcode:
create table EMail
(MailID int,
From varchar(255) not null,
To varchar(255),
Subject varchar(255),
SendingTime DateTime,
MsgText varchar(4096),
MyID ->varchar(255) oder integer? <- not null,
primary key (MailID))
Kann jemand etwas darüber aussagen?

Wo ist eigentlich der Unterschied zwischen den Typen "char" und "varchar"?

Vielen Dank im Voraus,
Steffen

Chewie 22. Jan 2004 19:10

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Zitat:

Zitat von Steffen
Wo ist eigentlich der Unterschied zwischen den Typen "char" und "varchar"?


Ein CHAR(n) nimmt immer n+1 Bytes ein, während ein VARCHAR(n) bis zu n+1 Bytes einnimmt oder weniger, wenn nicht alle Zeichen belegt sind.

Steffen 22. Jan 2004 19:18

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Danke!

Ich habe gerade noch diese datailiertere Erklärung gefunden:

Zitat:

Die CHAR- und VARCHAR-Typen sind ähnlich, unterscheiden sich aber in der Art, wie sie gespeichert und abgerufen werden.

Die Länge einer CHAR-Spalte wird auf die Länge festgelegt, die Sie bei der Erzeugung der Tabelle angeben. Die Länge kann zwischen 1 und 255 variieren. (Ab MySQL-Version 3.23 kann die Länge zwischen 0 und 255 liegen.) Wenn CHAR-Werte gespeichert werden, werden sie am rechten Ende bis zur festgelegten Länge mit Leerzeichen aufgefüllt. Wenn CHAR-Werte abgerufen werden, werden die Leerzeichen am Ende entfernt.

Werte in VARCHAR-Spalten sind Zeichenketten variabler Länge. Sie können eine VARCHAR-Spalte mit jeder Länge zwischen 1 und 255 deklarieren, genau wie für CHAR-Spalten. Im Gegensatz zu CHAR werden VARCHAR-Werte jedoch nur mit so vielen Zeichen wie nötig gespeichert, plus 1 Byte, um die Länge zu speichern. Die Werte werden nicht aufgefüllt; statt dessen werden Leerzeichen am Ende beim Speichern entfernt. (Diese Entfernung von Leerzeichen weicht von der ANSI-SQL-Spezifikation ab.)

Wenn Sie einer CHAR- oder VARCHAR-Spalte einen Wert zuweisen, der die maximale Spaltenlänge überschreitet, wird der Wert so zurecht geschnitten, das er passt.

Die unten stehende Tabelle stellt die Unterschiede zwischen den beiden Spaltentypen dar, indem das Ergebnis der Speicherung unterschiedlicher Zeichenkettenwerte in CHAR(4)- und VARCHAR(4)-Spalten gezeigt wird:
Aber das hilft mir nun auch noch nicht bei meiner eigentlichen Frage...

Robert_G 22. Jan 2004 20:56

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Ein Primärschlüssel sollte eigentlich immer numerisch sein.
Ich habe keine Ahnung wie das unter mySQL läuft, aber in Oracle definiere ich eine Sequence, die immer fleißig um 1 erhöht wird.
Um das ganze alphanumerisch zu lösen wäre ein viel höherer Aufwand nötig -> ars**langsam ...
Willst du, dass ein Feld oder eine Kombination mehrerer Felder eindeutig ist, solltest du eine Unique-constraint (keine Ahnung, wie das bei mySQL heißt) anlegen.

Steffen 23. Jan 2004 11:35

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Unique-Constraints gibt es in mySQL ebenso, wie in Oracle.

jlanger 26. Jan 2004 13:16

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Integer ist der mit Abstand schnellstmögliche Index (alleine schon von der Prozessorverarbeitung her).
Und wenn jemand meint, er müsste aber Zeichenfogen im Index haben, genauer gesagt, in der Artikelnummer (so wie die blöde Textilindustrie), weil er sonst nicht alles unterscheiden kann, bzw. weil bei ihm die Datenmenge sooo riesig ist, dass das sonst schnell an seine Grenzen stösst, dem sei gesagt, dass bei Integer (ist in der Regel Int32) ein 32-bit Integer zur Verfügung steht, also 2 hoch 32 verschiedene Zahlen, das sind etwa 4,3 Billionen.
Jaaa, wird derjenige jetzt wohl sagen, bei uns kommen aber soo viele Datensätze rein...
Wenn jede Sekunde 1 Datensatz hinzukomt, dann reicht es über 100 Jahre!
Falls jemand dann rechthaberisch stottert "Jaa, aber es is wirklich irrsinnig viel bei uns."
Dann nehmt einfach ein Int64 (64bit Integer) und sagt ihm:
Falls Sie jede Sekunde 5 Millionen Datensätze hinzufügen, dann rufen Sie mich in 100 Jahren nochmal an, dann haben wir noch 16 Jahre Zeit um zu überlegen, was wir löschen können...

Noch Fragen Kienzle?

Chewie 26. Jan 2004 13:23

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Zitat:

Zitat von jlanger
dass bei Integer (ist in der Regel Int32) ein 32-bit Integer zur Verfügung steht, also 2 hoch 32 verschiedene Zahlen, das sind etwa 4,3 Billionen.

Und es sind doch 4,2 Milliarden :zwinker:

Schubi 26. Jan 2004 13:30

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Zitat:

Zitat von Chewie
Zitat:

Zitat von jlanger
dass bei Integer (ist in der Regel Int32) ein 32-bit Integer zur Verfügung steht, also 2 hoch 32 verschiedene Zahlen, das sind etwa 4,3 Billionen.

Und es sind doch 4,2 Milliarden :zwinker:

Krümelkacker!
Auf die Paar kommt nun wirklich nicht mehr an! :mrgreen: :wall:

jlanger 26. Jan 2004 13:56

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Jou stimmt, lieber Milli Arden als gar keine Arden.

Schubi 26. Jan 2004 14:11

Re: mySQL-Schlüsselindex numerisch schneller, als alphanumer
 
Das erinnert mich an einen Film... "Mach blöß keine 0 zu viel auf die Überweisung, das wird teuer!"

"OK, 1, 2, 3, ... 7, 8!" :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz