ホームページ  >  記事  >  データベース  >  mysql-MySQL の 2 つのテーブルの関連付けクエリが遅い

mysql-MySQL の 2 つのテーブルの関連付けクエリが遅い

WBOY
WBOYオリジナル
2016-08-20 08:47:561781ブラウズ

mysql

2 つのテーブル A と B があります。

テーブル A はすべてのクライアントのログで、その数は 200 万です。
テーブル B はクライアントの詳細で、その数は 20,000 です。特定の条件を満たすクライアントのログ、SQL は次のとおりです:

<code>SELECT A.*FROM `VIEW_DATA.basic_LOG.20160523` AINNER JOIN (SELECT AGT_ID FROM VIEW_AGENT where AGT_GRP_ID in (999)) B ON A.`BAS_AGT_ID` = B.AGT_IDORDER BY `BAS_TIME` DESC, `ID` DESC LIMIT 7;</code>

1 SIMPLE Basic_log インデックス IX_BASIC_LOG_BAS_AGT_ID IX_BASIC_LOG_BAS_TIME_ID 10 7 100 where1 SIMPLE a eq_ref PRIMARY PRIMARY 4 ocular3_data.20160523.basic_log.BAS_AGT_ID の使用1 100

1 シンプル b eq_ref プライマリPRIMARY 4 ocular3.a.AGT_GRP_ID 1 100 使用場所; 使用インデックス

返信内容:

1.(999)のAGT_GRP_IDを=999のAGT_GRP_IDに変更します;

2. 必須フィールドのインデックスを作成します


引用元:

MySQL でネストされた結合を最適化する方法 http://www.data.5helpyou.com/article272.html


2 つのテーブルを逆に書き込み、内部リンクを外部リンクに変更し、(999) の AGT_GRP_ID を =999 の AGT_GRP_ID に変更します。

A.*、B.AGT_IDを選択

FROM VIEW_DATA.basic_LOG.20160523 A ,VIEW_AGENT B ここで、B.AGT_GRP_ID=999 および A.BAS_AGT_ID = B.AGT_ID

ORDER BY A.BAS_TIME DESC, A.ID DESC LIMIT 7; これに変更してみてください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。