3

行を追加する場合:

LEFT JOIN core_records_sales as sales ON DATE(appointments.date) = DATE(sales.date_sold)

私の質問では、スクリプトの実行時間が約8秒から2〜3分に短縮されます。

この問題の原因となるデータがありますか、それとも関数を正しく実装していませんか?

同じ日にする必要があるのでDATE()を使用する必要がありますが、日付フィールドはDATETIMEです

4

3 に答える 3

2

これは、ほぼ確実に、インデックス化されているアポイントメント.日付フィールドの問題です。DATE() 関数の使用を追加すると、インデックスを使用できなくなり、テーブル スキャンが強制されます。

私は以前にこれに対処しなければなりませんでしたが、問題を解決するために私が見つけた最良の方法は、日付部分のみ (時間なし) を含む別の列を作成するか、日付と時刻を 2 つの別々の列に格納することです.

他の人がそれを処理するより良い方法を持っているかどうか聞いてみたいです。

于 2009-11-19T19:01:39.220 に答える
1

日付列にインデックスがありますか?インデックスなしで参加するには、全表スキャンが必要であるため、パフォーマンスの問題の原因である可能性があります。

EXPLAINを介してクエリを実行し、クエリオプティマイザがクエリプランに対して何を考え出すかを確認します。

于 2009-11-19T18:54:00.297 に答える
0

これはおそらく、以前はクエリの一部としてインデックスを使用していたのに対し、両方のテーブルでフル テーブル スキャンを強制しているためです。計画を調べる必要があるので (さらに詳細を提供する必要があります)、EXPLAIN を実行して何が起こっているかを確認してください。

于 2009-11-19T18:55:22.553 に答える