-1

異なるphpファイルに3つのクエリがあります。しかし、私はいくつかの速度の問題を抱えていました。

query1 と query2 はおよそ650ms.

query3 はおおよそかかります140ms.

以下のクエリに誤りはありませんか?もしそうなら、私に知らせてください。

または、同じ結果で時間が短い別のクエリがありますか。

$query1 = "SELECT * FROM konu WHERE ( NOW() <  DATE_ADD( `time` , INTERVAL 1 DAY) ) ORDER BY time DESC";

$query2 = "SELECT * FROM konu WHERE ( NOW() <  DATE_ADD( `time` , INTERVAL 2 DAY ) ) AND ( NOW() >  DATE_ADD( `time`, INTERVAL 1 DAY ) ) ORDER BY time DESC";

$query3 = "SELECT * FROM konu WHERE ( NOW() >  DATE_ADD( `time`, INTERVAL 2 DAY ) ) AND ( NOW() <  DATE_ADD( `time`, INTERVAL 900 DAY ) ) ORDER BY time DESC";
4

1 に答える 1

2

あなたがダゴンからのコメントを理解していなかった場合、それは完全に正しいです. クエリを実行するときに、日付操作などで関数を使用して列名を変更すると、その列のインデックスは使用できません。ただし、NOW() を変更すると、「時間」列に基づくテーブルの既存のインデックスを使用できます。

SELECT * 
   FROM konu 
   WHERE 
      NOW() <  DATE_ADD( `time` , INTERVAL 1 DAY) 
   ORDER BY 
      `time` DESC";

と同じです

SELECT * 
   FROM konu 
   WHERE 
      `time` > DATE_ADD( NOW(), INTERVAL -1 DAY) 
   ORDER BY 
      `time` DESC";

結果を次のように比較しています

now LESS THAN   time          Time PLUS 1 day
8/12 10pm       8/12 2am      8/13 2am     keep this
8/12 10pm       8/11 11pm     8/12 11pm    keep this
8/12 10pm       8/10  4pm     8/11 4pm     not this

time AFTER     now            MINUS 1 day
8/12 2am       8/12 10pm      8/11 10pm      keep this
8/11 11pm      8/12 10pm      8/11 10pm      keep this
8/10 4pm       8/12 10pm      8/11 10pm      not this

変更されていない時間は、パフォーマンスと順序付けのためにインデックスを利用できます。求めているものを逆にして、元の列をそのままにしておくだけです。

于 2013-08-13T01:56:31.037 に答える