に私はこのクエリを使用しているように使用するために時間がかかりすぎて:PHPのMySQLのクエリは、タイムスタンプ
select field from table1 where time LIKE '%2016-03%' order by time asc limit 1
私の問題は、テーブルが数千行を持っているということですので、それは、1行の検索に時間がかかりすぎます。それは普通ですか?
に私はこのクエリを使用しているように使用するために時間がかかりすぎて:PHPのMySQLのクエリは、タイムスタンプ
select field from table1 where time LIKE '%2016-03%' order by time asc limit 1
私の問題は、テーブルが数千行を持っているということですので、それは、1行の検索に時間がかかりすぎます。それは普通ですか?
time
列にINDEX
を追加してください。また、他の点で指摘されているように、先頭の%
をクエリから削除してください。
ポイントはありません。 '%...% 'は、マッチのようにインデックスをどんな種類のインデックスにしても使用できません。 –
@MarcBああ、それは私の答えを更新しました。 – Canis
LIKE
クエリは、常に特定の値を探しているよりも遅くしようとしています。
それは非常に(これまでのように最初の%
をドロップタイムスタンプに前に年間何もがありません)、フィールド上INDEX
を追加し、LIKE '2016-03%'
にあなたのクエリを変更するのに役立ちます。それは少なくとも、いくつかのショートカットを取ることができるでしょう。
技術的には、「%...」や「%...%」のように遅いだけです。 'like '...%''は、同様のパターンの先頭の文字列インデックスを引き続き使用することができます。 –
LIKEを使用して%MYで始まる場合は、適切な日付を見つけるためにFULL TABLE SCANを作成する必要がありますが、年を指定して開始する場合はインデックスを使用できます:... KIKE '2016-03-%'
LIKEを使用するより効率的な検索方法があります。あなたが探しているフィールドのフォーマットは何ですか? – andrewsi
'month(time)= 3、year(time)= 2016のtable1のフィールドを選択するのはどうですか? – chris85
あなたのテーブルのDDLを投稿すれば、問題がインデックスにあるかどうかを判断できます。 –