Problem mit Index MySql 5.0.22

Problem mit Index MySql 5.0.22

am 12.07.2006 10:18:01 von sylwia

Hallo @all!

Nach der Umstellung von MySql 4 auf MySql 5 habe ich ein Problem mit
den Indexen!

Die Indexe werden nach einem INSERT nicht aktualisiert.

1 Neue Tabelle erstellen bei Programminstallation.

CREATE TABLE `artikel` (
`A_SEQ` int(11) NOT NULL auto_increment,
`A_ID` int(11) NOT NULL default '0',
..

PRIMARY KEY (`A_SEQ`),
KEY `A_ID` (`A_ID`),
....
) ENGINE=3DMyISAM DEFAULT CHARSET=3Dlatin1;


INSERT INTO .....
INSERT INTO .....
INSERT INTO .....


Anschließend mit 'SHOW INDEX FROM ARTIKEL'
zeigt A_SEQ(auto_increment) die richtige CARDINALITY, A_ID hingegen
nicht (NULL)!

Mit den Optionen -ALTER TABLE ARTIKEL DISABLE KEYS/ENABLE KEYS vor bzw.
nach den INSERTs wird der Index korrekt aufgebaut. Gehen muss es aber
auch ohne!



2 bei ganz 'normalen' INSERTs während der Arbeit..

Auch bei einem einzelnen INSERT (auch in anderen Tabellen) wird der
index ebenfalls nicht automatisch aufgebaut!

Nach dem INSERT DISABLE KEYS/ENABLE KEYS sind die Indexe vorhanden.


Wo liegt das Problem?

thx for help Sylwia

Re: Problem mit Index MySql 5.0.22

am 12.07.2006 11:29:36 von Axel Schwenke

"sylwia" wrote:

> Nach der Umstellung von MySql 4 auf MySql 5 habe ich ein Problem mit
> den Indexen!

Nein.

> Die Indexe werden nach einem INSERT nicht aktualisiert.

Eine IMHO haltlose Behauptung.

> 1. Neue Tabelle erstellen bei Programminstallation.
>
> CREATE TABLE `artikel` (
> `A_SEQ` int(11) NOT NULL auto_increment,
> `A_ID` int(11) NOT NULL default '0',
> ..
>
> PRIMARY KEY (`A_SEQ`),
> KEY `A_ID` (`A_ID`),
> ....
> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
>
> INSERT INTO .....
> INSERT INTO .....
> INSERT INTO .....
>
> Anschließend mit 'SHOW INDEX FROM ARTIKEL'
> zeigt A_SEQ(auto_increment) die richtige CARDINALITY, A_ID hingegen
> nicht (NULL)!

Ja. Und? Die Kardinalität eines Index ist ein Hint für den Optimizer,
wenn er zwischen mehreren Indizes wählen kann. Daß da NULL steht, heißt
nicht, daß da kein Index wäre. Nur, daß die Kardinalität des Index
bislang nicht bekannt ist.

> Mit den Optionen -ALTER TABLE ARTIKEL DISABLE KEYS/ENABLE KEYS vor bzw.
> nach den INSERTs wird der Index korrekt aufgebaut.

Der Index wird nicht "korrekt neu aufgebaut". Der Indexbaum wird neu
ausbalanciert und als Nebeneffekt wird die Kardinalität bestimmt.
OPTIMIZE TABLE würde das gleiche tun.


XL