MySQLのインデックスは、パーティションテーブルのクエリ後に作成しても、単一テーブルのクエリを加速しています

免責事項:この記事はブロガーオリジナル記事です、BY-SAの著作権契約、複製、元のソースのリンクと、この文を添付してくださいCC 4.0に従ってください。
このリンクします。https://blog.csdn.net/konkon2012/article/details/96482548
クエリをスピードアップするためには、我々は通常、どこの条件に基づいてインデックスを作成します!そして、その後、インデックスを作成し、それはより速く、パーティションでなければなりません!

我々は、ベースの注文フォームおよび注文商品テーブル、例えば、第一のテーブル構造を作成します。

CREATE TABLEの`zstb_orders`(
` order_id`のINT(10)UNSIGNED NOT NULL AUTO_INCREMENT、
`org_id`のINT(10)UNSIGNED NOT NULL、
` order_money`のDECIMAL(6,2)UNSIGNED NOT NULL DEFAULT '0.00'、
PRIMARY KEY( ` order_id`、 `org_id`)、
KEY` order_id`( `order_id`)
= UTF8)ENGINE = INNODBのデフォルトの文字セット。
CREATE TABLEの`zstb_orders_goods`( ` order_id`のINT(10)UNSIGNED NOT NULL DEFAULT '0'、 `org_id`のINT(10)UNSIGNED NOT NULL DEFAULT '0'、 ` goods_id`のINT(10)UNSIGNED NOT NULL DEFAULT '0' 、 `goods_name` VARCHAR(20)DEFAULT ''、 PRIMARY KEY(` order_id`、 `org_id`、` goods_id`) )ENGINE = INNODBのデフォルトの文字セット= UTF8。

  


次のように我々はorg_id` `を介して2つのテーブルを分割し、スクリプトは次のとおりです。

( `org_id`)(RANGEてテーブル` zstb_orders`パーティションをALTER 
パーティションP1は、(100)未満の値、
パーティションP2は、)(200未満の値
PARTITION P3は、(300)未満の値
PARTITION P4は(400)未満の値は、
PARTITION P5はMAXVALUE未満の値
)。
( `org_id`)(RANGEてテーブル` zstb_orders_goods`パーティションをALTER 
パーティションP1は、(100)未満の値、
パーティションP2は、)(200未満の値
PARTITION P3は、(300)未満の値
PARTITION P4は(400)未満の値は、
PARTITION P5はMAXVALUE未満の値
)。

  


この資料に記載されていないご質問に分割する「ORG_ID」を使用したい理由として、あなたはあなた自身のニーズに応じて分割されるように他のフィールドを使用することができます。

その後、いくつかのデータを挿入します。

`zstb_orders`(` order_id`、 `org_id`、order_money)VALUES(1、50、200)。INSERT INTO。
( `order_id`、` org_id`、 `goods_id`、` goods_name`)VALUES(1、50、1、 '酸奶')zstb_orders_goods` `。INSERT INTO。
( `order_id`、` org_id`、 `goods_id`、` goods_name`)VALUES(1、50、2、 '纯奶')zstb_orders_goods` `。INSERT INTO。

`zstb_orders`(` order_id`、 `org_id`、order_money)VALUES(2、150、200)。INSERT INTO。
( `order_id`、` org_id`、 `goods_id`、` goods_name`)VALUES(2、150、1、 '酸奶')zstb_orders_goods` `。INSERT INTO。
( `order_id`、` org_id`、 `goods_id`、` goods_name`)VALUES(2、150、2、 '纯奶')zstb_orders_goods` `。INSERT INTO。

`zstb_orders`(` order_id`、 `org_id`、order_money)VALUES(3、350、200)。INSERT INTO。
( `order_id`、` org_id`、 `goods_id`、` goods_name`)VALUES(3、350、1、 '酸奶')zstb_orders_goods` `。INSERT INTO。
( `order_id`、` org_id`、 `goods_id`、` goods_name`)VALUES(3、350、2、 '纯奶')zstb_orders_goods` `。INSERT INTO。

  


次は、クエリを分析します:

zstb_orders` `* FROMパーティションがSELECT EXPLAIN WHERE ORG_ID = 150;

  


注文がテーブルを照会するとき、我々は唯一のスキャンP2「」パーティションが、少しがっかり主キーインデックスを使用していないことがわかりました。

同様に、我々はまた、アイテムテーブルの分析を注文します:

zstb_orders_goods` `* FROMパーティションがSELECT EXPLAIN WHERE ORG_ID = 150;

  


それとものみスキャン結果P2「」パーティション、および主キー索引を使用しません。

私たちも、テーブル、クエリを分析してみましょう:

oはo.order_id = g.order_id WHERE o.org_id = 150にGと `zstb_orders_goods`を結合としてzstb_orders`` FROM PARTITIONS SELECT *をEXPLAIN。

  


のみをスキャンP2「」パーティションものの、メインテーブル「zstb_orders」に関するクエリが、主キーインデックスを使用していません。

でも、テーブルの上に「zstb_orders_goods」クエリは、テーブル全体をスキャンすることであるが、主キーインデックスを使用して、なぜ特定のパーティションテーブルにそれをスキャンしませんか?

oはo.order_id = g.order_id AND o.org_id = g.org_id WHERE o.org_id = 150にGと `zstb_orders_goods`を結合としてzstb_orders`` FROM PARTITIONS SELECT *をEXPLAIN。

  


、私たちは関連する条件を照会する必要があります考えてみましょう「zstb_orders_goodsは」「のorg_id」によって仕切られているが、それでもタイムテーブルクエリは、「ORG_ID」に指定されていませんでした

次のように上記の増加「のorg_id」は、関連することができます。

 

メインテーブルのクエリは、パーティションテーブルものの見つかったとしても、テーブル「zstb_orders_goods」お問い合わせ、P2「」に変更されませんが、インデックスが失ってしまいました!

同時に、私たちはパーティションを作成するだけでなく、インデックスを使用する必要があるのであれば、それは再作成されました。

`INDEXのorg_id_index(` org_id`)を追加zstb_orders_goods`表を改変すること。

  


あなたが作成した後、我々は最初の単一テーブルのクエリの場合を見てみましょう。

zstb_orders_goods` `* FROMパーティションがSELECT EXPLAIN WHERE ORG_ID = 150;

  


ただP2「」パーティションをスキャンしますが、インデックスを使用しませんが、私たちはインデックスを作成し、この時間の後、それはOK、それを使用していました!

でも、ちょうどテーブルをクエリの分析で:

oはo.order_id = g.order_id AND o.org_id = g.org_id WHERE o.org_id = 150にGと `zstb_orders_goods`を結合としてzstb_orders`` FROM PARTITIONS SELECT *をEXPLAIN。

  


これは、パーティションテーブルをスキャンするだけでなく、インデックスを使用するように!

あなたは、インデックスを使用して照会テーブルのzstb_orders」を習得したい場合はもちろん、その後、我々はまた、「zstb_ordersは」「ORG_ID」インデックスが可能作成する必要があります。
----------------
免責事項:この記事は轟音のオリジナルの記事は、CC 4.0 BY-SAの著作権契約、複製、元のソースのリンクを添付してくださいに従ってCSDNブロガー「プログラム猿ですそしてこの文。
オリジナルリンクします。https://blog.csdn.net/konkon2012/article/details/96482548

おすすめ

転載: www.cnblogs.com/sandea/p/11776145.html