はじめに
MySQL は、2016 年もデータベースの人気において力強い成長傾向を維持しました。 MySQL データベース上でアプリケーションを構築したり、Oracle から MySQL に移行したりする顧客が増えています。ただし、一部の顧客は、MySQL データベースの使用時に応答時間の遅さや CPU のフル使用率などの問題に遭遇することもあります。
Alibaba Cloud RDS エキスパート サービス チームは、クラウド顧客の多くの緊急問題の解決を支援してきました。 「ApsaraDB Expert Diagnostic Report」に表示される一般的な SQL の問題の一部を、参考までに以下にまとめます。
1. LIMIT ステートメント
ページング クエリは最も一般的に使用されるシナリオの 1 つですが、通常は最も問題が発生しやすいシナリオでもあります。
たとえば、次の単純なステートメントの場合、一般的な DBA のアイデアは、type、name、create_time フィールドに複合インデックスを追加することです。このように、条件付きソートはインデックスを有効に活用することができ、パフォーマンスを急速に向上させることができます。
SELECT * FROM operation WHERE type = 'SQLStats' AND name = 'SlowLog' ORDER BY create_time LIMIT 1000, 10;
そうですね、おそらく 90% 以上の DBA がこの問題を解決してそこで止まります。
しかし、LIMIT 句が「LIMIT 1000000,10」になっても、プログラマは依然として不満を抱くでしょう。「レコードを 10 件フェッチするだけなのに、なぜまだ遅いのですか?」
データベースは 1,000,000 番目のレコードがどこから始まるのかを認識していないため、インデックスがあっても最初から計算する必要があることを知っておく必要があります。この種のパフォーマンスの問題が発生する場合、ほとんどの場合、プログラマは怠惰です。フロントエンドのデータ閲覧やページめくり、ビッグデータの一括エクスポートなどのシナリオでは、前のページの最大値をクエリ条件のパラメータとして使用できます。 SQL は次のように再設計されています:
SELECT * FROM operation WHERE type = 'SQLStats' AND name = 'SlowLog' AND create_time > '2017-03-16 14:00:00' ORDER BY create_time limit 10;
2. 暗黙的な変換
SQL ステートメント内のクエリ変数とフィールド定義の型の不一致も、よくあるエラーの 1 つです。たとえば、次のステートメント:
フィールド bpn は varchar(20) として定義されています。MySQL の戦略は、比較する前に文字列を数値に変換することです。この関数はテーブルのフィールドに作用し、インデックスは無効になります。
上記の状況は、プログラマの本来の意図ではなく、アプリケーション フレームワークによって自動的にパラメータが入力された可能性があります。最近は非常に複雑なアプリケーションフレームワークが多く、使いやすい反面、穴を掘ってしまう可能性もあるので注意が必要です。
3. アソシエーションの更新と削除
MySQL5.6 では具体化機能が導入されていますが、現時点ではクエリ ステートメントに対してのみ最適化されているという事実に特別な注意を払う必要があります。 。更新または削除の場合は、手動で JOIN に書き換える必要があります。
たとえば、以下の UPDATE ステートメントでは、MySQL は実際にループ/ネストされたサブクエリ (DEPENDENT SUBQUERY) を実行しますが、その実行時間は想像できます。
4. 混合ソート
MySQLインデックスは混合ソートには使用できません。ただし、一部のシナリオでは、パフォーマンスを向上させるために特別な方法を使用する機会がまだあります。5、EXISTS语句
MySQL 对待 EXISTS 子句时,仍然采用嵌套子查询的执行方式。如下面的 SQL 语句:
执行计划为:
去掉 exists 更改为 join,能够避免嵌套子查询,将执行时间从1.93秒降低为1毫秒。
新的执行计划:
6、条件下推
外部查询条件不能够下推到复杂的视图或子查询的情况有:
聚合子查询;
含有 LIMIT 的子查询;
UNION 或 UNION ALL 子查询;
输出字段中的子查询;
如下面的语句,从执行计划可以看出其条件作用于聚合子查询之后:
确定从语义上查询条件可以直接下推后,重写如下:
SELECT target Count(*) FROM operation WHERE target = 'rm-xxxx' GROUP BY target
执行计划变为:
关于 MySQL 外部条件不能下推的详细解释说明请参考文章:
http://mysql.taobao.org/monthly/2016/07/08
相了解更多相关问题请访问PHP中文网:mysql视频教程
以上がMysql でよくある SQL 使用上の 8 つのエラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ストアドプロシージャは、パフォーマンスを向上させ、複雑な操作を簡素化するためのMySQLのSQLステートメントを事前に拡大します。 1。パフォーマンスの改善:最初のコンピレーションの後、後続の呼び出しを再コンパイルする必要はありません。 2。セキュリティの改善:許可制御を通じてデータテーブルアクセスを制限します。 3.複雑な操作の簡素化:複数のSQLステートメントを組み合わせて、アプリケーションレイヤーロジックを簡素化します。

MySQLクエリキャッシュの実用的な原則は、選択クエリの結果を保存することであり、同じクエリが再度実行されると、キャッシュされた結果が直接返されます。 1)クエリキャッシュはデータベースの読み取りパフォーマンスを改善し、ハッシュ値を使用してキャッシュされた結果を見つけます。 2)単純な構成、mysql構成ファイルでquery_cache_typeとquery_cache_sizeを設定します。 3)SQL_NO_CACHEキーワードを使用して、特定のクエリのキャッシュを無効にします。 4)高周波更新環境では、クエリキャッシュがパフォーマンスボトルネックを引き起こし、パラメーターの監視と調整を通じて使用するために最適化する必要がある場合があります。

MySQLがさまざまなプロジェクトで広く使用されている理由には、次のものがあります。1。複数のストレージエンジンをサポートする高性能とスケーラビリティ。 2。使いやすく、メンテナンス、シンプルな構成とリッチツール。 3。豊富なエコシステム、多数のコミュニティとサードパーティのツールサポートを魅了します。 4。複数のオペレーティングシステムに適したクロスプラットフォームサポート。

MySQLデータベースをアップグレードする手順には次のものがあります。1。データベースをバックアップします。2。現在のMySQLサービスを停止します。3。MySQLの新しいバージョンをインストールします。アップグレードプロセス中に互換性の問題が必要であり、Perconatoolkitなどの高度なツールをテストと最適化に使用できます。

MySQLバックアップポリシーには、論理バックアップ、物理バックアップ、増分バックアップ、レプリケーションベースのバックアップ、クラウドバックアップが含まれます。 1. Logical BackupはMySqldumpを使用してデータベースの構造とデータをエクスポートします。これは、小さなデータベースとバージョンの移行に適しています。 2.物理バックアップは、データファイルをコピーすることで高速かつ包括的ですが、データベースの一貫性が必要です。 3.インクリメンタルバックアップは、バイナリロギングを使用して変更を記録します。これは、大規模なデータベースに適しています。 4.レプリケーションベースのバックアップは、サーバーからバックアップすることにより、生産システムへの影響を減らします。 5. Amazonrdsなどのクラウドバックアップは自動化ソリューションを提供しますが、コストと制御を考慮する必要があります。ポリシーを選択するときは、データベースサイズ、ダウンタイム許容度、回復時間、および回復ポイントの目標を考慮する必要があります。

mysqlclusteringenhancesdatabaserobustnessnessnessnessnessnistandistributiondistributingdataacrossmultiplenodes.itesthendbenginefordatareplication andfaulttolerance、保証highavailability.setupinvolvesconfiguringmanagement、data、ssqlnodes、carefulmonitoringringandpe

MySQLのデータベーススキーマ設計の最適化は、次の手順を通じてパフォーマンスを改善できます。1。インデックス最適化:一般的なクエリ列にインデックスを作成し、クエリのオーバーヘッドのバランスをとり、更新を挿入します。 2。テーブル構造の最適化:正規化または反通常化によりデータ冗長性を削減し、アクセス効率を改善します。 3。データ型の選択:Varcharの代わりにINTなどの適切なデータ型を使用して、ストレージスペースを削減します。 4。パーティション化とサブテーブル:大量のデータボリュームの場合、パーティション化とサブテーブルを使用してデータを分散させてクエリとメンテナンスの効率を改善します。

tooptimizemysqlperformance、soflowthesesteps:1)properindexingtospeedupqueries、2)useexplaintoanalyzeandoptimize Queryperformance、3)AductServerContingSettingStingsinginginnodb_buffer_pool_sizeandmax_connections、4)


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









