MySQL Tablo Bölümünü Tabloya Yükselt

Aug 17 2020

Google Arama becerilerim buna bir çözüm bulmak için yeterli değildi. Mümkünse, bir masadaki bir bölümü kendi başına bir tabloya nasıl yükseltebilirim?

I olduğunu varsayalım part0, part1ve part2. Yeni bir tabloya ALTER TABLEdönüşen verebileceğim herhangi bir şey var mı part0?

Düşünce sürecim, veriler zaten diskte ayrı bir dosyada mevcut olduğundan, tablo oluşturma süreci bir SELECTsorgu kullanarak yeni bir tablo oluşturmaktan daha hızlı olabilir .

Yanıtlar

RolandoMySQLDBA Aug 17 2020 at 23:04

İhtiyacın yok SELECT. Bu saf DDL ile yapılabilir.

Bu örnek için bölümlenmiş tablonun aşağıdaki gibi olduğunu varsayalım:

  1. Veri tabanı mydb
  2. Tablo mytable
  3. Bölmeler ( part0, part1, part2)

Bu zor olabilir ama işte burada

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;
ALTER TABLE mytable DROP PARTITION p0;

Bunun yaptığı şey ilk önce mynewtableherhangi bir bölüm olmadan ve diğer tüm yönlerden aynı şemayı yapmaktır . Ardından, mynewtablemasayı ile değiştirir part0.

Bundan emin değilseniz, koşun

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;

İçerideki mynewtableve yeniyi inceleyin part0ve emin olun

  • mynewtable orijinal verilere sahip part0
  • Yeni part0boş olmalı

Transpozisyonun çalıştığından emin olduktan sonra çalıştırın

ALTER TABLE mytable DROP PARTITION p0;

Lütfen bunu bir laboratuarda veya kare kemanta test edin. BİR ŞANS VER !!!

RickJames Aug 17 2020 at 21:54

Evet, a PARTITIONbir TABLE. Ancak, bir bölümü tabloya dönüştürmek veya tam tersi için bazı özel komutlar gerekir.

"Taşınabilir tablo alanları" ve İHRACAT İÇİN SIKMA TABLOLARI tablosuna bakın; DEĞİŞTİRME TABLOSU ptable DISCARD TABLESPACE; ALTER TABLE ptable TABLESPACE AKTAR. Ayrıntılar, MySQL 5.6 ve 5.7+ arasında farklıdır.

http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioning teknikleri tartışan birkaç yerle bağlantıları vardır.