- En el funcionamiento diario del sitio web, habrá cada vez más datos de tablas de registro y de negocios. Cuando llegue a más de 10 millones, las consultas complejas, como las tablas de unión involucradas, se volverán cada vez más lentas, y también ocuparán más y más espacio en disco. En este momento, podemos conservar los datos durante un período de tiempo, y podemos eliminar o archivar otros datos con un tiempo prolongado según la situación.
- De acuerdo con el conocimiento convencional, ya sea para eliminar directamente datos inválidos o archivar datos inválidos, vacíe el número inválido de la tabla original, debe usar la declaración de eliminación para eliminar. Sin embargo, de acuerdo con los resultados de las pruebas dadas en el artículo del blogger Ao Bing , ¿Por qué MySQL no recomienda usar delete para eliminar datos , después de usar directamente delete para eliminar 50w piezas de datos en una tabla con 1 millón de datos, no solo el espacio en disco? ocupada por la tabla no se reduce a Pequeño, y la eficiencia de ejecutar consultas al mismo tiempo no se mejora. Esto es porqueMySQL en realidad no elimina el espacio dentro, y marca la eliminación, es decir, modifica delflag: N a delflag: Y. Después de la confirmación, se purgará en la lista de eliminación. Si se inserta un registro más grande la próxima vez, el espacio después eliminar no se reutilizará, si el registro insertado es menor o igual que eliminar, el registro vacío se reutilizará
- En este momento, para vaciar realmente el espacio ocupado por datos no válidos, podemos usar la partición de la tablaIntercambio de particiónMétodo para lograr este objetivo.
- En primer lugar, asegúrese de que el orden de la tabla a operar sea una tabla particionada, no que el rendimiento de la partición se transforme en una tabla particionada (tomará más tiempo transformarse directamente en una tabla particionada cuando haya más datos en la tabla. Puede crear una tabla particionada con la misma estructura primero y luego usar dataX Importar los datos a la tabla de particiones)
- Luego, cree un medio de tabla intermedia común con la misma estructura que la tabla de particiones, y luego cree una tabla de particiones de archivo order_bak
- Finalmente, el intercambio de particiones.
Primero importe los datos de una partición no válida a la tabla intermedia
alter table order exchange partition p201808 with table middle;
Importe los datos de la tabla intermedia en la partición correspondiente en la tabla de archivo
alter table order_bak exchange partition p201808 with table middle;
Finalmente, elimine la partición p201808 en la tabla de pedidos.
- De esta manera, la tabla original y la tabla de archivo son tablas particionadas por mes. Solo necesita crear una tabla ordinaria intermedia y hacer dos intercambios de partición durante el período pico bajo de la empresa. Puede eliminar datos no válidos y reclamar espacio, y no hay fragmentación de espacio, afectará el índice en la tabla y el plan de ejecución de SQL.
- Es imposible para nosotros construir todas las particiones a la vez. Necesitamos hacer una tarea programada. Al principio o al final de cada mes, agregue particiones a la tabla original y la tabla de archivo antes de realizar la operación de archivo.