Si vous rencontrez des problèmes de performances, vous pouvez conserver la valeur dans une variable de session. De cette façon, vous pouvez être sûr qu'il ne sera calculé une fois.
set@LastMonday=LastMonday();select@Lastmonday;
(dans cette simple requête, il ne fait aucune différence, bien sûr...)
c'est exactement ce que j'avais "éviter" la longtemps à la recherche des calculs de date jusqu'à maintenant ... j'ai été/je suis inquiet au sujet d'éventuels frais généraux ... Depuis, j'ai ajouté votre "mise à jour des performances" suggestion à notre base de code. Cela fait une énorme différence, en quelque sorte, je m'attendais à la fonction d'être appelé qu'une seule fois ... (mais comment est l'optimiseur de savoir que je ne suis pas retourner de temps en millisecondes ..) L'astuce ici est que la valeur est calculée une fois puis mis en cache manuellement. Vous pouvez essayer ce que l'optimiseur ne. Il pourrait être assez intelligent pour mettre en cache en trop, mais vous ne pouvez pas vraiment compter sur elle. Si aujourd'hui, c'est lundi, ce sera de retour aujourd'hui
-- Today is 05 April 2013-- Get Last Monday from MySQLSELECT DATE_FORMAT(LAST_DAY(NOW())-((7+ WEEKDAY(LAST_DAY(NOW()))-7)%7),'%Y-%m-%d') last_monday;-- Output
last_monday
-------------2013-04-29
Pour moi, c'est ni plus simple, ni plus performant que le code en question? .. mais je vais prendre le conseil et ré-expression de la question du titre! Pour moi, cette fonction génère pas lundi prochain, mais le lundi d'après.
Si vous n'êtes pas à l'aide d'un ancien MySQL, vous pouvez envelopper ce dans une fonction stockée.
et ensuite appeler
Mise à jour:
Si vous rencontrez des problèmes de performances, vous pouvez conserver la valeur dans une variable de session. De cette façon, vous pouvez être sûr qu'il ne sera calculé une fois.
(dans cette simple requête, il ne fait aucune différence, bien sûr...)
Depuis, j'ai ajouté votre "mise à jour des performances" suggestion à notre base de code. Cela fait une énorme différence, en quelque sorte, je m'attendais à la fonction d'être appelé qu'une seule fois ... (mais comment est l'optimiseur de savoir que je ne suis pas retourner de temps en millisecondes ..)
L'astuce ici est que la valeur est calculée une fois puis mis en cache manuellement. Vous pouvez essayer ce que l'optimiseur ne. Il pourrait être assez intelligent pour mettre en cache en trop, mais vous ne pouvez pas vraiment compter sur elle.
Si aujourd'hui, c'est lundi, ce sera de retour aujourd'hui
OriginalL'auteur Wouter van Nifterick
OriginalL'auteur Jacek
Essayez ceci:
Pour moi, cette fonction génère pas lundi prochain, mais le lundi d'après.
OriginalL'auteur Neeraj Singh