Datenbank Index anlegen

port29

deus.Server
Hallo Leute,

ich brauche da mal etwas Hilfe beim Anlegen eines Datenbank Index (MySQL). Ich habe eine Tabelle mit momentan 20Mio Einträgen (3GB Daten). Die Daten wurden alle in die Tabelle importiert, die Struktur der Daten soll aber so bleiben. Aber um eine schnellere Suche durchführen zu können, benötige ich ein Index.

Ja, aber genau da liegt auch mein Problem. In der Tabelle ist eine Artikel Nummer in zwei Teile geteilt worden und das soll auch so bleiben.

Code:
mysql> select count(*) from a_list where CONCAT(f13,f14)='011210349338';
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (1 min 22.93 sec)

So sieht das Query aus, das abgesetzt werden soll. Jetzt ist die Frage, ob ein Index über zwei Spalten angelegt werden muss oder zwei Indizes über jeweils eine Spalte?
 
Moin port29,

das hängt davon ab, wie auf die Tabelle zugegriffen werden wird.
Wenn Du es über eine Applikation/eine GUI gewährleisten kannst, dass der End-User komfortabel auswählen kann:
"Gesuchte Artikelnummer:" xxxxxuuuuuu"
und im Hintergrund wird aus deser Angabe ein
"... where f13 = 'xxxxx' and f14 = 'uuuuu' "
---------> dann ein Index auf 2 Spalten ( INDEX on f13, f14)

Ein Index auf eine Spalte würde Dir so oder so nix bringen... Index auf ArtikelHauptgruppe (und danach nicht sortiert) ist nutzlos und Index auf "ArtikelAllesNachDerHauptgruppe" ist niemalsnich eindeutig--> ganz nutzlos.

Grüße
Biber
 
Hi,

nein, eben das geht ja leider nicht. Ich kann die Nummer nicht in zwei Teile teilen, da ich eben nicht weiß, wo f13 aufhört und f14 anfängt. Deshalb habe ich ja in meinem Beispiel die CONCAT Methode verwendet.
 
Probier mal Folgendes:
Code:
SELECT COUNT(*)
FROM a_list
WHERE `f13` = LEFT("011210349338", LENGTH(`f13`)) AND CONCAT(f13,f14)="011210349338"
 
Hmmm.... also wenn ich das so aufteile, bin ich rund 8 Sekunden schneller fertig. Also brauche ich nur einen Index auf f13?
 
Ich glaube nicht dass bei einer Konkatenation zweier Spaltenwerte auf den Index zugegriffen wird.
 
Zurück