今日私が書こうとしている内容では、プログラムは 7 時間近く実行され、データベースに 1,000 万個のデータが保存されました。 —— 本日お話ししたいのは、MySQL データベースの IF() 関数の例です。 具体的なシナリオは次のとおりです。 まずテーブル構造を見てみましょう。 テーブル `message` を作成します ( `id` varchar(30) NOT NULL, `title` varchar(30) デフォルト NULL, `content` テキスト、 `send_time` 日時 デフォルト NULL、 `type` int(1) DEFAULT NULL COMMENT '1: システム通知、2: 苦情提案', `status` int(1) DEFAULT NULL COMMENT '0: 送信待ち、1: 成功、2: 失敗', 主キー (`id`) )ENGINE=InnoDB デフォルト文字セット=utf8; 具体的な要件は、システム通知と苦情提案の合計数、成功数、失敗数をそれぞれカウントすることです。 このような問題が発生した場合、一般的な考え方としては、タイプ グループ化を使用して、システム通知、苦情、提案の合計数をそれぞれ照会し、次に 2 つのサブクエリを使用して成功した項目と失敗した項目の数をカウントします。 SQL は次のとおりです。 選択 COUNT(1) 合計、 m.タイプ、 (選択 カウント(1) メッセージ送信者 ms ここで、ms.status = 1 AND m.type = ms.type) 成功合計、 (選択 カウント(1) メッセージ mf から ここで、mf.status = 1 かつ、m.type = mf.type) 失敗合計 メッセージmから GROUP BY m.type 実行時間を見てみましょう。1000万個のデータをカウントするのに約6分18秒かかります。 では、もっと簡単で速いカウント方法はあるのでしょうか? もちろんあります。それが、今日主に取り上げる if() 関数です。 基本的な構文 IF(expr1, expr2, expr3) は、expr1 の値が true の場合は expr2 の値を返し、expr1 の値が false の場合は expr3 の値を返します。単純な三項式です。 やり方 アイデアについてお話ししましょう。成功した結果の数を数える場合、if(status=1,1,0) を次のように記述できます。status==1 の場合は 1 を返し、それ以外の場合は 0 を返します。次に、SUM() 関数を使用して成功した結果の数を合計します。 実装 SQL ステートメントは次のとおりです。 選択 COUNT(1) 合計、 m.タイプ、 SUM(IF(m.status = 1,1,0)) 成功合計、 SUM(IF(m.status != 1,1,0)) 失敗合計 メッセージmから GROUP BY m.type; 上記のサブクエリよりもずっとシンプルに見えませんか? 実行時間を見てみましょう。わずか 1 分 30 秒です。ずっと速くないですか? それで、今日はそれを学びましたか? 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: WeChatミニプログラムはどのようにしてユーザー情報とユーザーの電話番号を同時に取得するのか
目次1. Dockerfile とは何ですか? 2. Dockerfile構築プロセスの分析3. D...
最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...
1. MySQLの文字セットを確認する '%char%' のような変数を表示します。...
MySQL の基盤となるデータ構造が B+ ツリーであることは誰もが知っていますが、ではなぜ赤黒ツリ...
Hiveのインストールディレクトリで、confディレクトリに入り、hive-site.xmlファイル...
質問コードにはプロンプトがありません: RN 開発に不慣れな、フロントエンド以外の学生の多くは、「ど...
2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...
目次イベントループmiscroTask (マイクロタスク) UI レンダリング (重要なポイント)次...
この記事では、参考までに、csv中国語データをNavicat for SQLiteにインポートする具...
リッチ テキスト コンポーネントは、Web プログラムで、特にブログやフォーラムなどの Web サイ...
Tomcat は内部的に複数の ClassLoader を定義し、アプリケーションとコンテナーが異な...
目次1. 配列を宣言して初期化する2. 合計、最小値、最大値を計算する3. 文字列、数値、オブジェク...
Mysql が CPU を占有しすぎる場合、どこから最適化を開始すればよいでしょうか? CPU 使...
目次序文スタックと2つのキューを理解する実行プロセス簡単な例より難しい例要約する序文以下の内容はブラ...
1. 基本仕様(1)InnoDBストレージエンジンを使用する必要があります。解釈:トランザクション、...