2011-01-18 10 views
6

Una vez leí en un blog de performance que es mejor usar las funciones de fecha de PHP para establecer fechas en una consulta MySQL en lugar de usar funciones de fecha mysql como curdate() porque mysql puede almacenar en caché la consulta o resultado o algo así. ¿Alguien tiene alguna idea de esto? ¿Tiene agua o es infundada?Caché MySQL y funciones de fecha

ejemplo:

$query = 'SELECT id FROM table WHERE publish_date = \''.date('Y-m-d').'\''; 

vs

$query = 'SELECT id FROM table WHERE publish_date = CURDATE()'; 

Respuesta

7

no se almacena en caché Cualquier función que contiene CURDATE(). Source

La codificación de la fecha debe ser almacenada en la memoria caché por lo que yo sé. Aunque es posible que desee considerar el uso de la funcionalidad prepare en lugar de empalmar cadenas en su consulta (para la cordura y la seguridad).

+0

exactamente lo que estaba buscando. ¡Gracias! – dqhendricks

0

yo personalmente prefiero que esté primera forma, ya que dan clara cabeza acerca de la hora del servidor (zona horaria), mi acaecer servidor MySQL sea 10h antes, cuando promissed :)

hora local en el script PHP se aplicará en SQL

+0

aunque no es una respuesta a la pregunta en cuestión, sigue siendo un buen punto. – dqhendricks

2

Es bastante simple en realidad. El servidor MySQL no ver su código PHP lo que va a recibir uno de estos:

SELECT id FROM table WHERE publish_date = '2010-01-18'; 
SELECT id FROM table WHERE publish_date = CURDATE(); 

No va a leer sus intenciones tampoco. Para MySQL, '2010-01-18' es una cadena y es determinista: su valor siempre es '2010-01-18'. Sin embargo, CURDATE() no es determinista: su valor varía según la fecha en que lo ejecute. Por lo tanto, el primero es cacheable y el segundo no.

+0

sí, sé que mysql no puede ver mi php y recibe una cadena. Sé que puede guardar en caché esta consulta con seguridad. No estaba seguro de si era posible que mysql guardara en caché una consulta con curdate hasta el final del día o algo así. – dqhendricks

+0

@dqhendricks Bueno, MySQL determina la validez de un resultado en caché a través de las fechas de modificación de las tablas subyacentes. No es más complejo que eso. –

Cuestiones relacionadas