クエリとテーブル定義自体に問題があると思います。
-
Table.name
4K文字列です - クエリはその列で並べ替えています
文字列を格納している列に基づいて並べ替えています。文字列で並べ替えるには、文字列の比較を実行する必要があります。文字列の比較は操作が遅くなる傾向があり、使用している列のサイズを考えると、顕著なパフォーマンスの低下を引き起こす可能性が非常に高くなります。
name
の内容はわかりません 列であり、それを必要とする実際の名前を考えるのは難しいようです。 多くの文字。
この文字列に概念的に異なる複数のデータが含まれている場合は、可能であれば列を複数の個別の列に分割し、必要に応じて正規化する必要があります。
その列の内容を複数の小さな列に分割して使用できる場合、文字列の比較は、コストはかかりますが、比較される文字列が現在よりも大幅に短くなるため、「高速」になります。
考慮すべきもう1つのことは、回避によって検索を最適化できるかどうかです。 文字列の比較全体、またはインデックスを定義したにもかかわらず全表スキャンを引き起こすクエリを回避することによって。
そのためには、explain
の使用を検討する必要があります クエリ実行プラン
ドキュメントの引用(私の強調):
編集1
name
列は実際にはユーザーノート用です。この場合、次のことを考慮する必要があると思います(追加 すでに述べたことに):
- 列の名前を実際の内容に関連する名前に変更します
- 列からインデックスを削除します
- しないでください その列を検索、並べ替え、または選択して表示する以外の操作に使用します(非常に 他の目的で使用する必要がある場合はまれです、IMHO。)
- オプションで、列を
text
に変更することを検討してください 入力すれば、ユーザーのエッセイについてそれほど心配する必要はありません 警告なしに切り捨てられる(GUIがユーザーに同じ入力長制限を適用していない場合)