ホームページ >データベース >mysql チュートリアル >SQL データベース ステートメントの最適化分析と最適化手法の概要 (SQL 最適化ツール)
通常、SQL データベースは最適化および分析する必要がありますが、SQL 最適化のいくつかの方法についてはここでは詳しく紹介しません。また、最適化ツール SQL Tuning Expert for Oracle も付属しています。使用方法としては、まずデータベース最適化のいくつかの原則に従う必要があります:
1. インデックスの失敗を引き起こすため、結合を使用する必要があります。複雑な結合クエリを複数のクエリに分割しながら、小さな結果セットを使用して大きな結果セットを駆動します。そうしないと、結合するテーブルが増えるほど、ロックや輻輳が発生します。
3. ファジー クエリの使用に注意し、%% の使用を避けてください。たとえば、select * from a where name like '%de%';
置換ステートメント: select * from a where name >= ' de' と name < ; 'df';
4. クエリが必要なフィールドのみをリストし、メモリを節約するために select * from... を使用しないでください。
insert into a (id ,name) values(2,'a'), (3,'s');6.limit ベースは比較的大きいです 7. ランダムにレコードを取得するために rand 関数を使用しないでください。テーブルを構築するときに null を使用しないでください。
9. count(id) ではなく count(*) を使用します 10. 不要なソートを行わず、可能な限りインデックス内でソートを完了します まず SQL を見てみましょう:
select ii.product_id, p.product_name, count(distinct pim.pallet_id) count_pallet_id, if(round(sum(itg.quantity),2) > -1 && round(sum(itg.quantity),2) < 0.005, 0, round(sum(itg.quantity),2)) quantity, round(ifnull(sum(itag.locked_quantity), 0.00000),2) locked_quantity, pc.container_unit_code_name, if(round(sum(itg.qoh),2) > -1 && round(sum(itg.qoh),2) < 0.005, 0, round(sum(itg.qoh),2)) qoh, round(ifnull(sum(itag.locked_qoh), 0.00000),2) locked_qoh, p.unit_code, p.unit_code_name from (select it.inventory_item_id item_id, sum(it.quantity) quantity, sum(it.real_quantity) qoh from ws_inventory_transaction it where it.enabled = 1 group by it.inventory_item_id ) itg left join (select ita.inventory_item_id item_id, sum(ita.quantity) locked_quantity, sum(ita.real_quantity) locked_qoh from ws_inventory_transaction_action ita where 1=1 and ita.type in ('locked', 'release') group by ita.inventory_item_id )itag on itg.item_id = itag.item_id inner join ws_inventory_item ii on itg.item_id = ii.inventory_item_id inner join ws_pallet_item_mapping pim on ii.inventory_item_id = pim.inventory_item_id inner join ws_product p on ii.product_id = p.product_id and p.status = 'OK' left join ws_product_container pc on ii.container_id = pc.container_id //总起来说关联太多表,设计表时可以多一些冗余字段,减少表之间的关联查询; where ii.inventory_type = 'raw_material' and ii.inventory_status = 'in_stock' and ii.facility_id = '25' and datediff(now(),ii.last_updated_time) < 3 //违反了第一个原则 and p.product_type = 'goods' and p.product_name like '%果%' // 违反原则3 group by ii.product_id having qoh < 0.005 order by qoh desc上記の SQL では、クエリに非常に悪影響を与えるサブクエリを使用しました。より良い方法は次のステートメントです: 1. from ステートメントではサブクエリを使用しないでください。 2. 検索範囲を制限して狭める場合は、より多くのインデックスを使用します。
ツール SQL Tuning Expert を使用します。 for Oracle は SQL ステートメントを最適化します
SQL 開発者や DBA にとって、ビジネス ニーズに基づいて正しい SQL を作成するのは簡単です。では、SQL の実行パフォーマンスはどうでしょうか?より高速に実行できるように最適化できますか?上級DBAでないと自信がない人も多いのではないでしょうか。
幸いなことに、自動最適化ツールがこの問題の解決に役立ちます。これが今日紹介する Tosska SQL Tuning Expert for Oracle ツールです。 ダウンロード
https://tosska.com/tosska-sql-tuning-expert-tse-oracle-free-download/このツールの発明者は、Dell の元チーフ エンジニアである Richard To です。 20 年以上の SQL 経験 最適化の経験。
1. データベース接続を作成します。これは後で作成することもできます。接続情報を入力し、「接続」ボタンをクリックします。 Oracle クライアントをインストールし、Oracle クライアント上で TNS を構成している場合は、このウィンドウで「接続モード」として「TNS」を選択し、「データベース エイリアス」でデータベース エイリアスとして構成された TNS を選択できます。
3. [調整] ボタンをクリックすると、同等の SQL が多数自動的に生成され、実行が開始されます。テストはまだ完了していませんが、SQL 20 のパフォーマンスが 100% 向上していることがすでに確認できます。
SQL 20 を詳しく見てみましょう。SQL 20 は 2 つのヒントを使用し、最も速い実行速度を実現します。元の SQL には 0.99 秒かかりますが、最適化された SQL の実行時間は 0 秒に近くなります。
この SQL はデータベース内で毎日数万回実行されるため、最適化後はデータベースの実行時間を約 165 秒節約できます。
最後に、アプリケーションのソース コード内のパフォーマンスの問題がある SQL を同等の SQL 20 に置き換えます。アプリケーションを再コンパイルし、パフォーマンスが向上しました。
調整タスクは正常に完了しました。
関連記事:
SQL パフォーマンスの最適化の概要と SQL ステートメントの最適化の記事
SQL ステートメント最適化の原則、SQL ステートメントの最適化
関連ビデオ:
以上がSQL データベース ステートメントの最適化分析と最適化手法の概要 (SQL 最適化ツール)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。