MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?

MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?

序文

パーティション フィールドは主キーの一部でなければならないことは誰もが知っています。では、複合主キーを作成した後、パーティション フィールドに別のインデックスを追加する必要がありますか?効果はありますか?検証してみましょう。早速、詳しい紹介を見ていきましょう。

1. 新しいテーブル effect_new を作成します (作成時間に基づいて月ごとにパーティション化されます)

テーブル `effect_new` を作成します (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `type` tinyint(4) NOT NULL デフォルト '0',
 `timezone` varchar(10) デフォルト NULL,
 `date` varchar(10) NOT NULL,
 `hour` varchar(2) デフォルト NULL,
 `position` varchar(200) デフォルト NULL,
 `country` varchar(32) NOT NULL,
 `create_time` 日時 NOT NULL デフォルト '1970-01-01 00:00:00',
 主キー (`id`,`create_time`)、
 キー `index_date_hour_country` (`date`,`hour`,`country`)
) ENGINE=InnoDB AUTO_INCREMENT=983041 デフォルトCHARSET=utf8
範囲によるパーティション分割 (TO_DAYS (`create_time`))
(パーティション p0 の値が (736754) 未満です) エンジン = InnoDB、
 パーティション p1 の値が (736785) 未満です。エンジン = InnoDB、
 パーティション p2 の値が (736815) 未満です。エンジン = InnoDB、
 パーティション p3 の値が (736846) 未満です。エンジン = InnoDB、
 パーティション p4 の値が (736876) 未満です。エンジン = InnoDB、
 パーティション p5 の値が (736907) 未満です。エンジン = InnoDB、
 パーティション p6 値が (736938) 未満です。エンジン = InnoDB、
 パーティション p7 の値が (736968) 未満です。エンジン = InnoDB、
 パーティション p8 値が (736999) 未満 エンジン = InnoDB、
 パーティション p9 値が (737029) 未満です。エンジン = InnoDB、
 パーティション p10 の値が (737060) 未満です。エンジン = InnoDB);

2. データを挿入します。

`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('1', '0', 'GMT+8', '2017-07-01', '', 'M-NotiCleanFull-FamilyRecom-0026', '', '2017-07-02 00:07:02') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('2', '1', 'GMT+8', '2017-09-30', '23', 'Ma5dtJub', 'EG', '2017-10-01 00:00:00') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('3', '1', 'GMT+8', '2017-09-10', '10', '28', 'DZ', '2017-09-11 00:08:20') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('4', '1', 'GMT+8', '2017-02-03', '20', '32', 'AD', '2017-02-04 00:00:00') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('5', '0', 'GMT+8', '2017-03-05', '2', NULL, 'AI', '2017-03-06 02:10:00') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('6', '0', 'GMT+8', '2017-09-23', '13', 'M-BrandSplash-S-0038', 'AG', '2017-09-23 13:00:00') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('7', '1', NULL, '2017-10-13', '12', 'BB-Main-AppAd-0018', 'AF', '2017-10-14 12:00:00') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('8', '0', 'GMT+8', '2017-10-28', '2', 'M-ChargeReminder-S-0040', 'AE', '2017-10-29 00:00:00') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('9', '1', 'GMT+8', '2017-10-09', NULL, '30', 'AI', '2017-10-10 00:09:00') に INSERT INTO します。
`effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('10', '0', 'GMT+8', '2017-10-05', '5', ' M-BrandSplash', 'LA', '2017-10-06 05:10:00') に INSERT INTO します。

3. ステートメントを分析する

パーティションの説明
effect_new_indexから*を選択
ここで、create_time = '2017-10-14 12:00:00'

結果は次のとおりです。

id選択タイプテーブルパーティションタイプ可能なキーキーの長さ参照フィルター余分な
1単純効果_新規8ページ全てヌルヌルヌルヌル391515 10 where の使用

4. テーブルeffect_newにインデックスidx_ctimeを追加します。

5. インデックスを追加した後の実行プランを分析する

結果は次のとおりです。

id選択タイプテーブルパーティションタイプ可能なキーキーの長さ参照フィルター余分な
1単純効果_新規8ページ参照idx_ctime idx_ctime 5定数60760 100ヌル

6. 結論:

テーブルはこのフィールドによってパーティション分割されますが、これはインデックスと同等ではありません。パーティション分割後、フィールドに特定の値を持つレコードが特定のパーティションに含まれることしか言えませんが、それはインデックスではないため、それらを見つけるのに時間がかかります。

場合によっては、主キーがパーティション列と等しくないことがあります。主キーにクラスター化インデックスを作成する場合は、パーティション列を含めて複合主キーにする必要があります。では、この場合、パーティション基準列にはインデックスがないのでしょうか?はい、しかし、十分な速度ではありません。パーティション列がこの複合インデックスで最初にランクされていない場合、十分な速度ではありません。パーティション列が検索ステートメントのフィルタリング条件として頻繁に使用される場合は、パーティション列用の追加インデックスを作成する必要があります。

要約する

上記はこの記事の全内容です。この記事にはまだ多くの欠点があります。この記事の内容が皆様の勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQL の高度な機能 - データ テーブル パーティショニングの概念とメカニズムの詳細な説明
  • MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明
  • MySql テーブル、データベース、シャーディング、パーティショニングの知識ポイントの紹介
  • MySQLテーブルシャーディングとパーティショニングの具体的な実装方法
  • Navicat による MySQL パーティショニングの実践
  • MySQL パーティションテーブルの正しい使用方法
  • MySQL 最適化 Zabbix パーティション最適化
  • MySQL データベース テーブルのパーティション分割に関する考慮事項 [推奨]
  • MySQL データ テーブル パーティション テクノロジーの簡単な分析
  • MySQL データテーブルのパーティション戦略と利点と欠点の分析

<<:  VMware WorkStation 14 pro インストール Ubuntu 17.04 チュートリアル

>>:  VMware での Ubuntu と Windows 間のファイル共有

推薦する

Linux で XFS パーティション形式のルート ディレクトリを縮小する方法

目次序文システム環境現在のシステムパーティションレイアウトデータのバックアップレスキューモードに入る...

CSS でよく発生する問題の整理 (ロゴのハッキング/コンテナの固定/画像の垂直方向の中央揃え)

1. IEブラウザモードハックロゴ1. CSSハックロゴコードをコピーコードは次のとおりです。 ie...

Navicat 接続 MySQL エラーの説明分析

目次環境仮想マシンバージョンMySQL バージョン事前準備MySQLの実行ステータスを確認するルート...

CSS と JavaScript を使用して管理ダッシュボードのレイアウトを構築するためのサンプル コード

あなたが作成するものこの新しいチュートリアルでは、CSS と JavaScript を使用して、レス...

Nginx の場所に関する一般的なルールの優先順位の問題

目次1. 場所/マッチング2. 場所 = / 一致Locaitonには、完全一致(=)、プレフィック...

Windows 10 の仮想マシンに Mac システムをインストールするグラフィック チュートリアル

1. 仮想マシンバージョン15.5.1をダウンロードする公式サイトから直接最新バージョンをダウンロー...

Linux ソフトウェアのインストール場所を確認する簡単な方法

1. ソフトウェアのインストールパスを確認します。 Linuxソフトウェアをインストールできる場所は...

CSS 命名: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS の説明

CSS の適用範囲はグローバルです。プロジェクトがどんどん大きくなり、参加する人が増えるにつれて、命...

シンプルな HTML ビデオ プレーヤーを実装する方法

この記事では、シンプルな HTML ビデオ プレーヤーを実装する方法を紹介し、皆さんと共有します。詳...

Windows 10 Home Edition に Docker をインストールする方法

最近、プロジェクトをアップグレードするために Docker を使用しました。これまで使用したことがな...

MySQL 8の新機能におけるグローバルパラメータの永続性の詳細な説明

目次序文グローバルパラメータの永続性最後に要約する参考資料:序文2018 年に MySQL 8.0....

Springboot および Vue プロジェクトの Docker デプロイメントの実装手順

目次A. SpringbootプロジェクトのDockerデプロイメント1. Springbootプロ...

ウェブサイトレイアウトにおける CSS の計算関数 calc の例

calc は数値を計算するために使用される CSS 関数です。長さ、角度、時間などを計算できます。 ...

VueはGraphVisを使用して無限に拡張された関係グラフを開発します

1. GraphVis 公式サイトにアクセスして、対応する js をダウンロードします。js の新し...

HTML で選択ドロップダウン ボックスのコンテンツが不完全に表示され、部分的にカバーされる問題の解決策

今日、問題が発生しました。クエリ バーのドロップダウン ボックスの内容が長すぎて、一部が隠れてしまっ...