¡Espero que puedas ayudarme!
Tengo varias particiones en mi base de datos durante los últimos años. Su convención de nomenclatura es pYYYYMM. Por ejemplo, p202206 sería para junio de 2022.
¿Cómo haría para decir: SELECCIONAR * DE LA TABLA donde las particiones están dentro de los últimos 6 meses?
Lo siguiente funciona: ¿parece esto más eficiente que tener rangos de fechas en la declaración where ya que está especificando explícitamente las particiones para buscar?
WITH t1 as (SELECT GROUP_CONCAT(PARTITION_NAME) FROM information_schema.PARTITIONS
WHERE TABLE_SCHEMA = 'ran' AND TABLE_NAME = 'order_data' and PARTITION_DESCRIPTION > 2016)
SELECT * INTO @items FROM t1;
WITH t2 as (select concat('select * from order_data PARTITION(',@items,')'))
SELECT * INTO @query FROM t2;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
¡Muchas gracias de antemano!
Simplemente usaría el rango de fechas en la cláusula WHERE.
Puede confirmar que eliminará la partición con EXPLAIN PARTITIONS (creo que las versiones recientes de MySQL incluyen la información de la partición de forma predeterminada en la salida EXPLAIN).
Si la poda de particiones funciona, es prácticamente el mismo rendimiento que especificar las particiones.
Solo debe especificar particiones si las condiciones de su consulta no permiten que la eliminación de particiones funcione automáticamente.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras