最近確認された5件のデータを照会するビジネスがあります。 `id`、`title` を選択 `th_content` から ここで、`audit_time` < 1541984478 かつ `ステータス` = 'オンライン' `audit_time` DESC、`id` DESC で並べ替え 制限5; 当時の監視状況を確認すると、CPU 使用率が 100% を超えていました。Show テーブルの構造を表示する テーブル `th_content` を作成します ( `id` bigint(20) 符号なし NOT NULL AUTO_INCREMENT, `title` varchar(500) 文字セット utf8 NOT NULL デフォルト '' COMMENT 'コンテンツのタイトル', `content` mediumtext CHARACTER SET utf8 NOT NULL COMMENT 'メインコンテンツ', `audit_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '監査時間', `last_edit_time` タイムスタンプ NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最終編集時間', `status` enum('CREATED','CHECKING','IGNORED','ONLINE','OFFLINE') 文字セット utf8 NOT NULL デフォルト 'CREATED' コメント '情報ステータス', 主キー (`id`)、 キー `idx_at_let` (`audit_time`,`last_edit_time`) )ENGINE=InnoDB デフォルト文字セット=utf8mb4; インデックスには、左側に 上記の SQL 実行のロジックを分析します。
最後に、データ量が大きいため、5 行のみが取得されますが、先ほど示した極端な例によれば、実際には 100 万行のデータが照会され、最終的にデータベースの 50 万行のメモリ ソートがメモリ内で実行されます。 したがって、非常に非効率的です。 最初のステップのクエリ プロセスを説明するために概略図が描かれています。ピンクの部分は、最終的にテーブルでクエリする必要があるデータ行を表します。 画像では、インデックス保存ルールに従って一部のデータを偽造して入力しました。何か間違っている点がありましたら、メッセージを残して指摘してください。この図を通して、共同インデックスストレージとインデックスクエリの方法を理解していただければ幸いです。 改善案1 範囲検索は、適切なインデックスでは使いにくいです。audit_time と テーブル `th_content` を変更し、インデックス `idx_audit_status` (`audit_time`, `status`) を追加します。 mysql> explain select `id`, `title` from `th_content` where `audit_time` < 1541984478 and `status` = 'ONLINE' order by `audit_time` desc, `id` desc limit 5; +----+--------------+------------+--------+------------------------------------------+------------------+--------+--------+------------+-------------+ | id | select_type | テーブル | タイプ | possible_keys | key | key_len | ref | 行 | 追加 | +----+--------------+------------+--------+------------------------------------------+------------------+--------+--------+------------+-------------+ | 1 | SIMPLE | th_content | range | idx_at_ft_pt_let、idx_audit_status | idx_audit_status | 4 | NULL | 209754 | where の使用 | +----+--------------+------------+--------+------------------------------------------+------------------+--------+--------+------------+-------------+ 詳細: インデックスを追加した後の実行プロセスを分析してみましょう。
上の図では、ピンク色は最初の列のインデックス要件を満たす行を示しています。1 つずつ前方にクエリを実行すると、このリーフ ノードに 3 つのレコードが見つかります。次に、前のリーフ ノードで左方向にクエリを続行する必要があります。レコードに一致する 5 行が見つかるまで、最終的にテーブルに戻ります。 改善点
この指標の欠点
改善案2 テーブル `th_content` を変更し、インデックス `idx_audit_status` を削除します。 テーブル `th_content` を変更し、インデックス `idx_status_audit` (`status`, `audit_time`) を追加します。 こうすることで、仕分けするときもテーブルに戻すときもプレッシャーがかかりません。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: VMware 15.5 に CentOS7 をインストールするためのグラフィック チュートリアル
問題が発生しました。情報の編集をテストする際、編集した内容に一重引用符 (') が含まれてい...
使用制限クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要が...
目次1. タスクキュー2. 混乱を招く問題を説明する1. setTimeout(f1,0)とは何です...
環境: 10.12 の新機能Python 3.6 MySQL 5.7.25 の場合ジャンゴ 2.2....
before/after 疑似クラスは、要素内に 2 つの追加タグを挿入するのと同じです。最も適した...
MySQL トランザクション分離レベルを表示する mysql> '%isolation...
並行処理関数 i の `grep server /etc/hosts | awk '{pri...
この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...
最近、Vue プロジェクトについて知り、ElementUI でデータを xlsx および Excel...
この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...
1. 関連概念1.1 Jenkins の概念: Jenkins は、使用されるプラットフォームに関係...
1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...
Linux で Go 環境を構築するのは非常に簡単です。 1. go1.2.1.linux-386....
CSS3 は、要素の 2D 平面変換と視覚的な 3D 空間変換を実装します。2D 変換はより頻繁に使...
1. 一般的な使用法: (1)%で使用する% は 1 つ以上の文字のワイルドカードを表します。たとえ...