Preference MAX(id) ou Table [SQL] - PHP - Programmation
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.
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
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; |
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).
Marsh Posté le 23-02-2003 à 11:14:15
Core 666 a écrit : |
oui, un champ indexé évidemment...
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
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.
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 ?