Salut à tous.
J'ai un problème de compréhension au sujets des indexes.
J'ai fait le même test, et je n'obtiens pas le même résultat. Voici le test :
Rien de bien compliqué ! Et voici les différences :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `col1` int unsigned NOT NULL, `col2` int unsigned NOT NULL, PRIMARY KEY (`col1`) ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED; create UNIQUE INDEX `idx2` USING BTREE ON `test` (`col2`); SHOW WARNINGS; insert into `test` (`col1`,`col2`) values (1, 9),(2, 8),(3, 7),(4, 6),(5, 5),(6, 4),(7, 3),(8, 2),(9, 1); select * from test;
Avec 'engine=MyIsam' ou 'engine=Memory', j'obtiens le bon résultat. Ma table est tri selon la 'PRIMARY KEY' (col1).
Et avec 'engine=InnoDB', j'obtiens le mauvais résultat. Ma table est tri sur l'indexe (col2).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 +------+------+ | col1 | col2 | +------+------+ | 1 | 9 | | 2 | 8 | | 3 | 7 | | 4 | 6 | | 5 | 5 | | 6 | 4 | | 7 | 3 | | 8 | 2 | | 9 | 1 | +------+------+
L'ordre du tri n'est pas le même ! Tout ce passe comme si l'indexe 'idx2' dans 'engine=InnoDB' venait influencer l'ordre des lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 +------+------+ | col1 | col2 | +------+------+ | 9 | 1 | | 8 | 2 | | 7 | 3 | | 6 | 4 | | 5 | 5 | | 4 | 6 | | 3 | 7 | | 2 | 8 | | 1 | 9 | +------+------+
Qu'est-ce qui vient perturber cet ordre ?
Autrement dit, est-ce que j'ai dans 'my.ini' un mauvais paramétrage sur 'engine=InnoDb' ?
Merci.
@+
Partager