注:元の質問は意味がありませんが、関連するものを下までスキャンしてください。
次のような最適化したいクエリがあります。
select cols from tbl where col = "some run time value" limit 1;
どのキーが使用されているか知りたいのですが、説明するために渡すものは何でも、定数を入力したため、where句を最適化して何もできません(「不可能なWHEREに気づきました...」)。
- Explain で一定の最適化を行わないように mysql に指示する方法はありますか?
- 何か不足していますか?
- 必要な情報を取得するためのより良い方法はありますか?
編集:EXPLAIN
定数値から生じるクエリプランを私に与えているようです。クエリはストアド プロシージャの一部であるため (また、spoc 内の IIRC クエリ プランは呼び出される前に生成されます)、値が定数ではないため、これは役に立ちません。私が望むのは、オプティマイザが実際の値がわからないときに生成するクエリ プランを調べることです。
私は何かを逃していますか?
Edit2: 他の場所で尋ねると、MySQL は、再利用するためにわざわざ行かない限り、常にクエリ プランを再生成するようです。ストアド プロシージャでも。このことから、私の質問は無意味であるように思われます。
しかし、それは私が本当に知りたかったことを意味のあるものにしません. 特定のクエリ内で定数である値を含むクエリを最適化するにはどうすればよいですか? -- たとえば、クライアント側のコードがwhere
句に数値を含むクエリを生成しているとします。数値が不可能な where 句になる場合もあれば、そうでない場合もあります。Explain を使用して、クエリがどの程度最適化されているかを調べるにはどうすればよいですか?
私がすぐに見ている最善のアプローチはEXPLAIN
、存在する/存在しないケースの完全なマトリックスに対して実行することです。手動で行うのは難しく、エラーが発生しやすいため、実際にはあまり良い解決策ではありません。