mysql Union all の効率の問題

WBOY
リリース: 2016-06-23 14:03:38
オリジナル
2300 人が閲覧しました


同じ構造を持つテーブルが複数あり、結合テーブル クエリを実行する必要があります。次のステートメントを使用します。

select sum(cnt) from (select count(*) as cnt from t1 where a>100 Union all select.. . ) as t; この文は合計を得るのが非常に簡単です。

select * from t1 where a>100 Union all select * from t2 where a>100 Union all select * from t3 where a>100 order by b desc limit 0,10000;
この文は非常に効率が悪いようです。長い間結果が出ました。

どのように最適化すべきですか、ありがとうございます



ディスカッションへの返信 (解決策)

2 番目の文には、何らかの影響があると推定される order by b desc limit 0,10000 が含まれています。削除してみてください。

2 番目の文には、order by b desc limit 0,10000 が含まれているため、これを削除して試してください。


理由はわかります。各テーブルのデータ量が多すぎるため、クエリを実行すると、最初に複数のテーブルから一致するレコードがすべて取得されてから LIMIT されるため、処理が遅くなります。
しかし、各テーブルのクエリに LIMIT と ORDER BY を追加すると、取得されるデータが不正確になります。それを解決する方法はありますか?

ユニオン構造では、1 つの順序のみが許可されます (サブクエリを除く)

あなたの書き方は明らかに不合理、または時代遅れです (手動でテーブルを分割しており、分割が不合理であるため)
MySQL はパーティショニング機能を提供するようになりました適切な設定であれば、単一の小規模テーブルと同等の速度になります (ただし、複数のデータ ファイルに分割されます)

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!