[SQL]Preference MAX(id) ou Table

Preference MAX(id) ou Table [SQL] - PHP - Programmation

Marsh Posté le 22-02-2003 à 20:54:00    

Salut les gens.
 
Je me pose une question.
Prenons une page visité disons ... 1000 fois à l'heure.
 
Sur cette page on doit afficher l'id max de x tables.
 
Est ce k'il vaut mieux faire un SELECT MAX(id) FROM Table sur les x tables ?
Ou alors lors de l'enregistrement des données dans les x tables concernés mettre à jour le MAX(id) puis faire un select sur les x tables ?

Reply

Marsh Posté le 22-02-2003 à 20:54:00   

Reply

Marsh Posté le 23-02-2003 à 00:53:01    

Si tu consultes vraiment souvent le max id que ce que tu n'ajoute un id, je dirais que tu as peut-être intérêt à stocker ce max id, mais faut être sûr qu'il soit mis à jour lors de l'ajout d'un id
 
faudrait voir au niveau du sgbd si lui demander le max d'un id (si l'id est autoincrement et indexé par ex) c'est vraiment plus lourd que de récupérer la valeur d'un champ.


Message édité par antp le 23-02-2003 à 00:54:07

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-02-2003 à 00:57:51    

C'est du Mysql
Pas le moyen de me payer Oracle :/  
Et je ne connait pgsql.
 
Merci je vais faire des tests ;)

Reply

Marsh Posté le 23-02-2003 à 10:01:12    

Ca va revenir au même. J'aurais quand même une nette préférence pour le MAX(id) car :
 
- L'information est plus fiable, dans la mesure où tu n'utilises probablement pas les transactions.
- Ca économise un paquet de requêtes UPDATE.
- Ce n'est pas plus lent. Le MAX est stocké en dur dans les indexs :
 

mysql> EXPLAIN SELECT max(id) FROM news;
+------------------------------+
| Comment                      |
+------------------------------+
| Select tables optimized away |
+------------------------------+
1 row in set (0.00 sec)


 
D'où l'intérêt de ne JAMAIS faire de SELECT ID FROM table ORDER BY id DESC LIMIT 1
 
Le résultat est le même, par contre sur les grandes tables la rapidité n'a pas grand chose à voir (MySQL 4 excepté puisque les index descendants sont gérés, mais bon).

Reply

Marsh Posté le 23-02-2003 à 11:14:15    

Core 666 a écrit :


- Ce n'est pas plus lent. Le MAX est stocké en dur dans les indexs :


 
oui, un champ indexé évidemment...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-02-2003 à 14:58:41    

Oui, évidement, mais il ne fait pas mention de clause WHERE dans sa requête, et j'ose espérer que sur une page consultée 1000 fois par heure il a au moins une clef primaire sur le champ id :D

Reply

Marsh Posté le 23-02-2003 à 19:45:06    

merci de votre aide

Reply

Marsh Posté le 23-02-2003 à 22:12:09    

S'il s'agit d'un champ auto-incrémenté, tu dois aussi pouvoir récupérer la future valeur très rapidement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed