je crée avec MySQL une table simple avec trois champs dont deux champs c1 et C2 sont dans la PRIMARY.
Si je fais unil utilise la table d'index de la primary.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select * from table order by c1,C2
Si je fais unil n'utilise aucune table d'index ALORS que j'ai ajoute une table d'index unique C2,C1 en plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select * from table order by c2,c1
Remarque, si je fais unil utilise la table d'index ajoutée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select c2,c1 from table order by c2,c1
Comment faire pour qu'il utilise la table d'index dans le cas" ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select * from table order by c2,c1
Voici l'exemple :
Pour la tester :
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 create database MYBASE; DROP TABLE IF EXISTS `MYBASE`.`MYTABLE` ; CREATE TABLE IF NOT EXISTS `MYBASE`.`MYTABLE` ( `NUMBER` INT(11) NOT NULL , `NAME` VARCHAR(10) NOT NULL , `STATE` INT(11) NOT NULL , PRIMARY KEY (`NUMBER`, `NAME`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; CREATE INDEX `idx_number` ON `MYBASE`.`MYTABLE` (`NUMBER` ASC) ; CREATE INDEX `idx_name` ON `MYBASE`.`MYTABLE` (`NAME` ASC) ; CREATE UNIQUE INDEX `idx_name_number` ON `MYBASE`.`MYTABLE` (`NAME` ASC, `NUMBER` ASC) ;
-> utilise la PRIMARY
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 use mybase; explain select * from mytable order by number,name limit 100000,2;
-> Using filesort
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 explain select * from mytable order by name,number limit 100000,2;
-> Utilise idx_name
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 explain select name,number from mytable order by name,number limit 100000,2;
Partager