2016-03-23 10 views
0

に私はこのクエリを使用しているように使用するために時間がかかりすぎて:PHPのMySQLのクエリは、タイムスタンプ

select field from table1 where time LIKE '%2016-03%' order by time asc limit 1 

私の問題は、テーブルが数千行を持っているということですので、それは、1行の検索に時間がかかりすぎます。それは普通ですか?

+0

LIKEを使用するより効率的な検索方法があります。あなたが探しているフィールドのフォーマットは何ですか? – andrewsi

+1

'month(time)= 3、year(time)= 2016のtable1のフィールドを選択するのはどうですか? – chris85

+0

あなたのテーブルのDDLを投稿すれば、問題がインデックスにあるかどうかを判断できます。 –

答えて

0

time列にINDEXを追加してください。また、他の点で指摘されているように、先頭の%をクエリから削除してください。

See this post for more info

+0

ポイントはありません。 '%...% 'は、マッチのようにインデックスをどんな種類のインデックスにしても使用できません。 –

+0

@MarcBああ、それは私の答えを更新しました。 – Canis

1

LIKEクエリは、常に特定の値を探しているよりも遅くしようとしています。

それは非常に(これまでのように最初の%をドロップタイムスタンプに前に年間何もがありません)、フィールド上INDEXを追加し、LIKE '2016-03%'にあなたのクエリを変更するのに役立ちます。それは少なくとも、いくつかのショートカットを取ることができるでしょう。

+0

技術的には、「%...」や「%...%」のように遅いだけです。 'like '...%''は、同様のパターンの先頭の文字列インデックスを引き続き使用することができます。 –

0

LIKEを使用して%MYで始まる場合は、適切な日付を見つけるためにFULL TABLE SCANを作成する必要がありますが、年を指定して開始する場合はインデックスを使用できます:... KIKE '2016-03-%'