序文今日 GitHub を閲覧していたところ、SQL を最適化および書き換えるための sora という自動化ツールを見つけました。なかなか良いと思ったのでダウンロードして勉強してみました。このツールは多くの機能をサポートしており、日常の開発の補助ツールとして使用できます。今、私はあなたにそれをお勧めします~~~ Githubポータル: https://github.com/XiaoMi/soar 背景私たちの日々の開発において、SQL の最適化は常に日常的な開発タスクの 1 つです。定期的な SQL 最適化により、プログラムのパフォーマンスが向上するだけでなく、オンライン障害の可能性も低減できます。 現在一般的に使用されている SQL 最適化方法には、ビジネス レイヤーの最適化、SQL ロジックの最適化、インデックスの最適化などがあります。インデックス最適化は通常、インデックスを調整するか、新しいインデックスを追加することによって SQL 最適化の目的を達成します。インデックスの最適化により、短期間で大きな成果が得られることがよくあります。インデックスの最適化をツールベースの標準化されたプロセスに変換し、手動介入の作業負荷を軽減できれば、作業効率が大幅に向上することは間違いありません。 SOAR (SQL Optimizer And Rewriter) は、SQL を最適化および書き換えるための自動化ツールです。 Xiaomi の人工知能およびクラウド プラットフォームのデータベース チームによって開発および保守されています。 業界内の他の優れた製品との比較は次のとおりです。
上図からわかるように、サポートされている機能は豊富で、その機能的特徴は次のとおりです。
一言で言うとこれだけです。SQL最適化ツールなので、ただ語るだけでは意味がありません。まずは使ってみて効果を確かめてみましょう。 インストールインストールには次の 2 つの方法があります。 バイナリインストールパッケージをダウンロードする $ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64 -O soar chmod a+x ソア 最新バージョンを直接ダウンロードすることをお勧めします。そうしないとバグが発生します。 ダウンロードしたバイナリ ファイルを環境変数に追加するだけです (方法がわからない場合は Google で検索してください。ここでは説明しません)。 テストしてみましょう: $ echo 'select * from user' | soar.darwin-amd64 (バイナリファイル名に応じて入力してください) # クエリ: AC4262B5AF150CB5 ★ ★ ★ ☆ ☆ 75 ポイント ```sql 選択 * から ユーザー 「」 ## 最も外側のSELECTはWHERE条件を指定していません* **項目:** CLA.001 * **重大度:** L4 * **内容:** SELECT ステートメントに WHERE 句がないため、予想よりも多くの行が検査される可能性があります (フル テーブル スキャン)。 SELECT COUNT(\*) タイプのリクエストでは、精度が必要ない場合は、代わりに SHOW TABLE STATUS または EXPLAIN を使用することをお勧めします。 ## SELECT * Type query * **Item:** COL.001 の使用は推奨されません * **重大度:** L1 * **コンテンツ:** \* ワイルドカードを使用してすべての列を選択すると、テーブル構造が変更されたときにクエリの意味と動作が変わり、クエリによって返されるデータが増える可能性があります。 ソースのインストール 依存関係: 1. Go 1.10以上 高度な依存関係(開発者のみ)
バイナリファイルを生成します: github.com/XiaoMi/soar にアクセスしてください 使いやすい0. 事前準備 次のように表を準備します。 テーブル「users」を作成します( `id` bigint(20) 符号なし NOT NULL AUTO_INCREMENT, `username` varchar(64) NOT NULL DEFAULT '' `ニックネーム` varchar(255) デフォルト '' `password` varchar(256) NOT NULL DEFAULT '' `salt` varchar(48) NOT NULL DEFAULT '', `アバター` varchar(128) デフォルト NULL, `uptime` 日時 デフォルト NULL、 主キー (`id`)、 ユニークキー `username` (`username`) ) エンジン=InnoDB AUTO_INCREMENT=11 デフォルト文字セット=utf8mb4 1. SQL文を直接入力する(実行しない) $ echo "ユーザーから*を選択" | soar.darwin-amd64 $ # クエリ: 30AFCB1E1344BEBD ★ ★ ★ ☆ ☆ 75 ポイント ```sql 選択 * から ユーザー 「」 ## 最も外側のSELECTはWHERE条件を指定していません* **項目:** CLA.001 * **重大度:** L4 * **内容:** SELECT ステートメントに WHERE 句がないため、予想よりも多くの行が検査される可能性があります (フル テーブル スキャン)。 SELECT COUNT(\*) タイプのリクエストでは、精度が必要ない場合は、代わりに SHOW TABLE STATUS または EXPLAIN を使用することをお勧めします。 ## SELECT * Type query * **Item:** COL.001 の使用は推奨されません * **重大度:** L1 * **コンテンツ:** \* ワイルドカードを使用してすべての列を選択すると、テーブル構造が変更されたときにクエリの意味と動作が変わり、クエリによって返されるデータが増える可能性があります。 現在、MySQL への接続がないため、分析は完全に SQL ステートメントに基づいて実行されます。ご覧のとおり、提供されるレポートも非常に詳細ですが、それは単なる空っぽのシェルです。SQL ステートメントのみで提供される分析は正確ではないため、次のアプリケーションを開始します。 2. MySQLに接続してEXPLAIN分析レポートを生成する 構成ファイルで、mysql 関連の構成を次のように構成できます。 vi soar.yaml # yaml 形式の設定ファイル オンライン DSN: アドレス: 127.0.0.1:3306 スキーマ: asong ユーザー: ルート パスワード: root1997 無効: false テスト-dsn: アドレス: 127.0.0.1:3306 スキーマ: asong ユーザー: ルート パスワード: root1997 無効: false 設定が完了したら、実際に実行してみましょう。 $ echo "SELECT id,username,nickname,password,salt,avatar,uptime FROM users WHERE username = 'asong1111'" | soar.darwin-amd64 -test-dsn="root:[email protected]:3306/asong" -allow-online-as-test -log-output=soar.log $ # クエリ: D12A420193AD1674 ★ ★ ★ ★ ★ 100ポイント ```sql 選択 ID、ユーザー名、ニックネーム、パスワード、ソルト、アバター、稼働時間 から ユーザー どこ ユーザー名 = 'asong1111' 「」 ## 情報の説明 | id | select_type | table | partities | type | possible_keys | key | key_len | ref | rows | filtered | scalability | Extra | |---|---|---|---|---|---|---|---|---|---|---|---| | 1 | SIMPLE | *users* | NULL | const | username | username | 258 | const | 1 | ☠️ **100.00%** | ☠️ **O(n)** | NULL | ### 情報解釈の説明 #### SelectType 情報解釈* **SIMPLE**: 単純な SELECT (UNION やサブクエリなどは使用しません)。 #### 型情報の解釈* **const**: const は、定数値を使用して PRIMARY KEY を比較するために使用されます。クエリ テーブルに行が 1 つしかない場合は、system を使用します。例: SELECT * FROM tbl WHERE col = 1。 今回は結果にEXPLAIN情報分析レポートが含まれています。これは、Explain によって解析されるフィールドに慣れていない初心者にとって使いやすいものです。これを使用すると、SQL の問題を完璧に分析できます。すばらしいと思いませんか? 3. 文法チェック soar ツールは SQL 文を分析できるだけでなく、SQL 構文をチェックして問題を見つけることもできます。例を見てみましょう。 $ echo "select * from users" | soar.darwin-amd64 -only-syntax-check SQL 1: 行 1、列 5、"select * from users" 付近 (合計長さ 18) ここでは、select キーワードに t がありません。このコマンドを実行すると、問題をすぐに特定できます。SQL ステートメントが非常に長い場合は、このコマンドを使用して、SQL ステートメントが正しいかどうかを確認できます。 4. SQLの美化 私たちは日々の開発で、他の人が書いたコードをよく見ています。レベルの違いにより、一部の SQL 文は非常に乱雑に書かれているため、このツールが役立ちます。SQL 文をより美しく、理解しやすいものにすることができます。 $ echo "SELECT id,username,nickname,password,salt,avatar,uptime FROM users WHERE username = 'asong1111'" | soar.darwin-amd64 -report-type=pretty 選択 ID、ユーザー名、ニックネーム、パスワード、ソルト、アバター、稼働時間 から ユーザー どこ ユーザー名 = 'asong1111'; こちらのほうが直感的に分かりやすいと思いませんか? 結論このツールを使い始めたばかりなので、まだ他の遊び方を発見できていませんが、今後さらに追加する予定です。自分でゲームプレイをさらに学ぶには、github ポータル: https://github.com/XiaoMi/soar を参照してください。公式ドキュメントは実は非常に粗雑で、より多くのメソッドをアンロックするには独自の調査に頼る必要があります。結局のところ、ソースコードは提供されており、Go の学習にも役立ちます。小さなプロジェクトとして扱い、ゆっくりと最適化していく方が良いのではないでしょうか。 これで、MySQL 最適化ツール (推奨) に関するこの記事は終了です。MySQL 最適化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: docker で mysql に接続できない場合の解決策
>>: JavaScriptのonclickとclickの違いの詳細な説明
1. Nginxのインストール手順1.1 公式サイトの紹介http://nginx.org/en/d...
目次序文OpenJDKの確認とアンインストールダウンロードした圧縮パッケージを使用してJDKをインス...
目次1. 問題の説明2. 問題解決1. 問題の説明Vue プロジェクトを開発する場合、作成時に誤って...
この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...
中国の習慣では、旧暦の1月15日より前に新年を祝います。ここで、庭にいる友人たちに新年の幸せを祈りた...
起動時に Ubuntu デュアル システムが停止する問題の解決方法 (Ubuntu 16.04 およ...
今日、slave_exec_modeというパラメータを偶然見ました。マニュアルの説明から、このパラメ...
MySQL 8.0.12 のインストールには 2 日かかり、さまざまな問題が発生しました。以下にまと...
背景数日前、MySql でページングを行っていたときに、ページングに制限 0,10 を使用するとデー...
私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...
この記事の例では、星を消すためのJSの具体的なコードを参考までに共有しています。具体的な内容は次のと...
目次コンポーネントの再帰呼び出しレンダリングメソッドの使用プロジェクトに取り組んでいると、左側のメニ...
バックエンド管理システムで作業している場合、通常、メニュー権限制御に関連する問題に遭遇します。もちろ...
新しい設定ファイルを作成します (たとえば、nginx インストール ディレクトリの下の conf ...