序文今日 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の違いの詳細な説明
このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...
目次序文1. ルーティングの遅延読み込み1. ルートの遅延読み込みが必要なのはなぜですか? 2. ル...
CSS を導入する方法には、インライン スタイル、内部スタイル シート、外部スタイル シートの 3 ...
Shell は C 言語で書かれたプログラムであり、ユーザーが Linux を使用するための橋渡しと...
なぜこのような記事を書いたかというと、数日前の夜、仕事が終わろうとしていたときに、業務側で突然、テー...
こんなことがありました。今日はGitHubで遊んでいました。最初はログインせずにいくつかのページを閲...
実際の業務では、Excel からデータベースにデータをインポートする必要がある場合があります。データ...
この記事では、3D テキストのホバー変更効果を実現するための CSS3 のサンプル コードを紹介しま...
MySQLトリガーの簡単な例文法CREATE TRIGGER <トリガー名> -- トリ...
この記事では、参考までに、JSでスネークゲームを書くための具体的なコードを紹介します。具体的な内容は...
<canvas> 要素は、クライアント側のベクター グラフィックス用に設計されています。...
tomcat はオープンソースの Web サーバーです。Tomcat ベースの Web は実行効率...
ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...
仕事では、docker や kubernetes などのオープンソース ツールをさらに活用しましょう...
Anaconda は、大規模なデータ処理、予測分析、科学計算のための最も人気のある Python デ...