Prendre un exemple pour illustrer mon propos, ce n'est pas de l'optimisation prématurée :). J'aurai pu prendre d'autres exemples mais celui-là a l'avantage de parler à tout le monde.
Le fait que MySQL puisse se limiter à une passe sur l'index en MyISAM est principalement dû au fait que MyISAM n'est pas MVCC (multi-version concurrency control). Donc en l'occurrence, c'est une limite de MyISAM qui permet de contourner le problème. De ce que j'ai lu, la musique est différente avec InnoDB. Et MyISAM a tellement d'autres limitations que je ne suis pas super motivé pour l'utiliser.
PostgreSQL ne stocke pas les infos de visibilité des tuples dans l'index et ne peut donc pas se limiter au parcours d'un index.
Bref, on peut sans doute trouver des contournements avec MySQL et trouver des raisons pour lesquelles c'est inutile (en l'occurrence, c'est assez dangereux de présager que ce sera inutile pour tout le monde...), mais il n'en reste pas moins que c'est une limitation dangereuse et qui peut surprendre parce que ce n'est pas dans l'ordre naturel des choses. A mon sens, il aurait mieux valu attendre d'avoir réglé ce problème avant de mettre à disposition les triggers dans MySQL.
[^] # Re: Et Derby alors ?
Posté par Guillaume Smet (site web personnel) . En réponse à la dépêche Sun Microsystems fait l'acquisition de MySQL. Évalué à 2.
Le fait que MySQL puisse se limiter à une passe sur l'index en MyISAM est principalement dû au fait que MyISAM n'est pas MVCC (multi-version concurrency control). Donc en l'occurrence, c'est une limite de MyISAM qui permet de contourner le problème. De ce que j'ai lu, la musique est différente avec InnoDB. Et MyISAM a tellement d'autres limitations que je ne suis pas super motivé pour l'utiliser.
PostgreSQL ne stocke pas les infos de visibilité des tuples dans l'index et ne peut donc pas se limiter au parcours d'un index.
Bref, on peut sans doute trouver des contournements avec MySQL et trouver des raisons pour lesquelles c'est inutile (en l'occurrence, c'est assez dangereux de présager que ce sera inutile pour tout le monde...), mais il n'en reste pas moins que c'est une limitation dangereuse et qui peut surprendre parce que ce n'est pas dans l'ordre naturel des choses. A mon sens, il aurait mieux valu attendre d'avoir réglé ce problème avant de mettre à disposition les triggers dans MySQL.