sql >> データベース >  >> RDS >> Mysql

MySQLの選択は非常に遅いようですが、改善する方法を考えることができませんか?

    クエリとテーブル定義自体に問題があると思います。

    • Table.name 4K文字列です
    • クエリはその列で並べ替えています

    文字列を格納している列に基づいて並べ替えています。文字列で並べ替えるには、文字列の比較を実行する必要があります。文字列の比較は操作が遅くなる傾向があり、使用している列のサイズを考えると、顕著なパフォーマンスの低下を引き起こす可能性が非常に高くなります。

    nameの内容はわかりません 列であり、それを必要とする実際の名前を考えるのは難しいようです。 多くの文字。

    この文字列に概念的に異なる複数のデータが含まれている場合は、可能であれば列を複数の個別の列に分割し、必要に応じて正規化する必要があります。

    その列の内容を複数の小さな列に分割して使用できる場合、文字列の比較は、コストはかかりますが、比較される文字列が現在よりも大幅に短くなるため、「高速」になります。

    考慮すべきもう1つのことは、回避によって検索を最適化できるかどうかです。 文字列の比較全体、またはインデックスを定義したにもかかわらず全表スキャンを引き起こすクエリを回避することによって。

    そのためには、explainの使用を検討する必要があります クエリ実行プラン

    ドキュメントの引用(私の強調):

    編集1

    name 列は実際にはユーザーノート用です。この場合、次のことを考慮する必要があると思います(追加 すでに述べたことに):

    1. 列の名前を実際の内容に関連する名前に変更します
    2. 列からインデックスを削除します
    3. しないでください その列を検索、並べ替え、または選択して表示する以外の操作に使用します(非常に 他の目的で使用する必要がある場合はまれです、IMHO。)
    4. オプションで、列をtextに変更することを検討してください 入力すれば、ユーザーのエッセイについてそれほど心配する必要はありません 警告なしに切り捨てられる(GUIがユーザーに同じ入力長制限を適用していない場合)


    1. 既存のテーブルからテーブル(構造)を作成する

    2. フィジカル・スタンバイ・データベースのMRPのORA-01111

    3. SQL ServerのSERVERPROPERTY()からすべてのプロパティを返す改善されたスクリプト

    4. SQLite3.Exception:データベースディスクイメージの形式が正しくありません