実用的なバックグラウンドの
プロジェクトといくつかの表スペースが大きすぎる、とあまりにも多くの行が、それは、テーブルにサブライブラリーサブテーブルの数を決定しました。また、研究の選択プログラム、我々はビジネスより多くのコードの変更のためのいくつかの一般的なサブライブラリーサブテーブル・ソリューションに気づいた、それはMySQLのパーティショニングスキームを採用することを決定しました。
実際には、私の個人的意見では、パーティションテーブルは、MySQLが根底にあるサブライブラリーサブテーブルを達成するために私たちを助けている、ビジネス・コードの修正を含む必要はなく、分散トランザクションを心配する必要はありません。データベース、ロジック、または唯一のテーブルへのアクセスの面で、実際には、複数の物理パーティションのオブジェクトを持っていないので、具体的なゾーニング規則に基づいて特定のパーティションを照会します。
練習テーブル、テーブルスペース172G、1〜120万レコードを紹介します。
データベースのバージョン:RDS MySQLの5.6
ツール:アリ雲DTS
まず、なぜパーティション?
長所:
有効期限が切れ、あるいは全く保存されたデータのために、あなたはすぐにこれらのパーティションに関連するデータを削除することで、データを削除することができ、高いDELETEよりも効率的である
パーティションがwhere句で一つだけをスキャンするのに必要な条件を含む場合や、クエリ効率を向上させるために複数のパーティション
、例えば、次のステートメント:
SELECT *パーティションT FROM(P0、P1)C <5は、パーティションP0およびP1がされた基準と一致するレコードだけを選択する。
集約関数SUM(に向け)を、COUNT()のクエリは、各パーティション上で並列に処理される際に
、パーティション元々のデータテーブルは、より高いIOPSを達成するために、複数の物理ディスクに保存されている
短所を:
外部キーを使用することはできません、また、フルテキストインデックス(現在なし会社をすべきではサポートされていません。外部キーで、右)
パーティション・キーのデザインは、パーティションキーを取らない場合、テーブル全体のロックを起こしやすい、柔軟ではない
SQLを記述するために、開発者は、MySQLは再生する方法は明らかではありません
二、RANGEパーティショニングは
、現在MySQLのレンジ・パーティション(RANGE)、リスト・パーティション(LIST)、ハッシュ・パーティショニング(HASH)とKEYパーティション4をサポートしています。
この記事は、レンジ・パーティション(RANGE)時間のパーティションに基づいているので、私は簡単にRANGEパーティションを説明します。MySQLの5.6公式文書のより多くのパーティションタイプパーティションタイプを参照してください。
パーティションを割り当てられた間隔に従って、指定された列の値の継続間隔に。最も一般的には時間フィールドに基づいています。あなたは整数に変換された日付タイプの機能を使用できるかどうか実際には、整数列のパーティションに基づいて、それがベストです。MySQLの5.6サポートされているパーティション関数
この例で使用は、機能TO_DAYS
CREATE TABLEのメンバー(
ID VARCHAR(25)NOT NULL、
姓VARCHAR(25)NOT NULL、
姓VARCHAR(25)NOT NULL、
ユーザ名VARCHAR(16)NOT NULL、
電子メールでVARCHARを(35)、
joindate DATETIME NOT NULL DEFAULT '0000-00-00 〇時00分00秒'、
PRIMARY KEY(ID、joindate)を用いBTREE、
KEY idx_joindate(joindate)を用いBTREE
)ENGINE = InnoDBのDEFAULT CHARSET = UTF8 ROW_FORMAT COMPACT =
RANGE BY PARTITION(TO_DAYS(joindate) )(
P0パーティション以外VALUES LESS(TO_DAYS( '1960年1月1日'))、
パーティションP1 VALUES未満(TO_DAYS( '1970-01-01'))、
パーティションP2 VALUES未満(TO_DAYS(「1980年1月1日「))、
VALUES LESS THAN(TO_DAYSは(パーティションP3」1990-01-01「))、
VALUES LESS MAXVALUE P4 THANパーティション
);
PSは:あなたは主キーまたは一意のインデックスを持っている場合は、例のように、あなたのパーティションを配置する必要がありますまたjoindate分割キーでキーを追加、または作成に失敗します!
PS:上記のようにプラスLESS THAN MAXVALUE、後で新しいパーティションを追加することはできません!!!
例:
次のクエリは定義されたインデックス・パーティションP2に分類されます。そのため、クエリのキーは、複数のパーティション間で、あなたの条件の集計関数SUM()、COUNT()は、クエリ、それは各パーティション上で並列に処理される場合は、データのクエリをパーティションに対応するパーティションをダウンさせるだろうとき。あなたは完全な表パーティションを取らなかった場合は、キーのクエリは、クエリを実行します。
<ボーダーBorderBrush = "{TemplateBindingのBorderBrush }" BorderThickness = "{TemplateBindingのBorderThickness}"背景= "{TemplateBindingの背景}" CornerRadius = "3"
<VisualStateManager.VisualStateGroups>
<VisualStateGroup X:NAME = "ExpansionStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration = "0:0:0.3">
<VisualTransition.GeneratedEasingFunction>
<QuarticEase EasingMode = "EaseOut" />
</ VisualTransition。 GeneratedEasingFunction>
</ VisualTransition>
</VisualStateGroup.Transitions>
<visualSTATEのX:名= "拡張" />
<visualSTATEのX:名= "縮小">
<ストーリーボード>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty = "(UIElement.Opacity)"ストーリーボード.TargetName = "ExpandableContentControl">
<EasingDoubleKeyFrame KeyTime = "www.chenghylpt.com"値= "0" />
</ DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty = "パーセンテージ" Storyboard.TargetName = "ExpandableContentControl">
<EasingDoubleKeyFrame KeyTime = "www.renheyL.com"値= "0" />
</ DoubleAnimationUsingKeyFrames>
</ストーリーボード>
</ visualSTATEの>
</ VisualStateGroup >
</VisualStateManager.VisualStateGroups>
<DockPanel>
<トグルX:NAME = "HeaderSite" ContentTemplate = "{TemplateBindingのHeaderTemplate}" ContentTemplateSelector = "{TemplateBindingのHeaderTemplateSelector}" コンテンツ= "{TemplateBindingのヘッダ}" DockPanel.Dock = "トップ" 前景= "{TemplateBindingの前景}" たfontWeight = "{TemplateBindingのたfontWeight}" FocusVisualStyle = "{StaticResource ExpanderHeaderFocusVisual}" のfontStyle = "{TemplateBindingののfontStyle}" FontStretch = "{TemplateBindingのFontStretch}" のFontSize = "{TemplateBindingののFontSize}" のfontFamily = "{TemplateBindingののfontFamily}" HorizontalContentAlignment = WWW。 feironggw.cn "{TemplateBindingのHorizontalContentAlignment}" にisChecked = "{isExpandedとして結合、モード=双方向、RelativeSource = {RelativeSource TemplatedParent}} www.ztylegw。CN」マージン= "1" のminWidth = "0" minHeightプロパティ= "0" パディング= "{TemplateBindingのパディング}" スタイル= "{StaticResource ExpanderDownHeaderStyle}" VerticalContentAlignment = "{TemplateBindingのVerticalContentAlignment}" />
<プリミティブ:ExpandableContentControl X:NAME = "ExpandableContentControl" HorizontalContentAlignment = "{TemplateBindingのHorizontalContentAlignment}" www.yifa5yl.com VerticalContentAlignment = "{TemplateBindingのVerticalContentAlignment}"
証拠金= "{TemplateBindingのパディング}" ClipToBounds = "TRUE" www.zbzxyL12.com >
<のContentPresenter X:NAME = www.chengmingdl.com "ExpandSite" DockPanel.Dock = "底部" Focusableの= "偽"たHorizontalAlignment = "{TemplateBindingのHorizontalContentAlignment}" VerticalAlignmentを= "{TemplateBindingのVerticalContentAlignment}" />
</プリミティブ:ExpandableContentControl >
</ DockPanel>
</ボーダー>
<ControlTemplate.Triggers>
<トリガプロパティ= "isExpandedとして" 値= "false" に>
<setterプロパティ=「IsHitTestVisible」TargetNameは=「ExpandableContentControl」値=「偽」/>
</トリガー>
...
</ControlTemplate.Triggers>
私は、データクエリの移行が終了したらで、特に興味深い現象を発見しましたSQLの時間間隔パーティション化キーが同じでない場合は、行の行数に基づいて、インデックスの異なる範囲を行くために少なくなります。私はどのように達成するかの下にそれを勉強していないとして、
第三に、パーティション管理
パーティションの範囲を簡単に紹介し、その後、一般的な操作のパーティションについて何かを言います。
パーティションマネージャは、パーティションの増加、削除、およびクエリが含まれています。より詳細なパーティション管理MySQLの公式ドキュメント
1.増加パーティション
RANGEとLISTパーティションへ:
ALTERテーブルの追加パーティションをTABLE_NAME(パーティションP0値...(EXP))
#の例は、
ALTER TABLEのメンバーは、PARTITION(TO_DAYS(ADD www.hengxyul.comを「2021年3月1日」));
2.削除パーティションは
、パーティションを削除し、それはまた、パーティション内のすべてのデータが削除されます。あなたはすべての値をカバーすることはできませんパーティションにパーティションのリードを削除した場合は、ときにデータエラーを挿入します。
パーティションP0テーブルtable_nameは、ALTERを落とし、
3 Discoverをどのように多くのパーティション
WHERE TABLE_NAMEは=「INFORMATION_SCHEMA.PARTITIONS SELECT * FROMメンバー」;
四、データの移行は
非常に多くの概念の前で言った、私は、パーティションテーブルにデータを移行するには、この大きなテーブルについて話しています。
DTSは、なぜあなたはそれを選んだのですか?それは移行と段階的な移行の全額を支援するために、データのノンストップ移行することができますので、それは元のテーブルにほとんど影響を与えません。
次のように移行プロセスは次のとおりです。
まず、パーティションテーブル構造の内部で構築されたRDSの同じインスタンスで
DTSを使用して移行タスクを作成するには、構造銭を移行する際に、選択した+増分移行を唯一の全額を選択しない
し、次のターゲットライブラリを編集する必要がありますマイグレーションマッピングA-下で行われるテーブル名> Bから
タスクキューが空である場合、一時停止し、数分待ってから、マイグレーションタスクの終了、データ書き込みのタスクをオフ
最終更新テーブル名、データ移行とスイッチング(Iテスト環境でのいくつかの時間のためのパーティションテーブルを変更しますが、RDSのテーブル名が秒単位で変更された変更)する
公式文書を参照してください:MySQLの5.6パーティション
ビューの純粋に個人的な点より、私を修正してくださいされていない場合。
パーティションテーブルのRDSの下で練習 - MySQLの
おすすめ
転載: www.cnblogs.com/qwangxiao/p/11241627.html
おすすめ
ランキング