2017-01-17 3 views
-2

に問い合わせ条件は今あるとき()関数を使用することはできません背景:私の場合はインデックスさvarchar列は、MySQL

、MySQLは5.7です。

Aという名前のテーブルと、date_strという名前のインデックス付きの列があります。 date_strのデータは2017-01-16 00:00:00のようになります。

問題:

私は、インデックスがこのようなselect * from A where date_str > now()など範囲クエリで使用することはできませんことを発見しました。 enter image description here

ただし、クエリ条件が別の関数right()の場合はインデックスが使用されます。

enter image description here

つまり、なぜ誰もが知っていますか?ありがとう。

+1

日付は、文字列ではなく、日付、日時、またはタイムスタンプフィールドに格納します。 – Shadow

+0

クエリプランを共有できますか?レコードが少ない場合や、列date_strの値が重複している場合は、索引を使用できません。 –

+0

私は平らなクエリを追加しました。ありがとう@AnilAgrawal – biaobiaoqi

答えて

0

クエリプランごとに、必要に応じてインデックスが使用されます。

インデックスを適用する前に、データベースクエリアナライザはクエリを分析し、異なる操作のコストを見積もります。

インデックスを適用するとクエリのパフォーマンスが向上することがクエリアナライザによって分かった場合、インデックスのみが使用されます。

これらの統計情報は、表の増減データ/更新データによって変わります。

関連する問題