-1

一致する列がないテーブルで 2 つの MySQL クエリを実行しようとしています。これら 2 つのクエリの結果を照合し、一方の列の一部が他方のデータベースの列と一致する場合にのみ情報を提示する必要があります。これが私がこれまでに持っているものです:

select data2, time_id from db.table1
where data2 in
(select right(dst,10) from db2.table2
where calldate like '2012-09-01%' and lastdata like <blocked for privacy>)
having (time_id between '1346475600' and '1346562000');

私の理解では、3 行目から 4 行目のサブクエリを最初に呼び出す必要がありますね。このステートメントに関する私の問題は、常にタイムアウトになることです。時間がかかりすぎます。これを間違ってフォーマットしていますか?別の方法はステートメントを使用することであると確信してjoinおり、その方向への助けは素晴らしいでしょう。

4

1 に答える 1

0

フォーマットが間違っているわけではありません。これは本当に悪いクエリであり、サーバーがばかげた計算を行う必要があります。それを正しく行うためにいくつかのステップを踏んでみましょう。

  1. 部分的なフィールドに参加しようとしないでください。結合するデータを含む table2 に列を追加します。クエリを実行して、そのフィールドに入力します。そのフィールドを最新の状態に保つためのトリガーを追加します。スキーマにアラートを出すことはできませんか? 一時テーブルを作成し、それに応じてデータを入力し、代わりにそれに参加します。
  2. 日時フィールドで like を使用しないでくださいcall date BETWEEN <datetime 1> AND <datetime 2>
于 2012-09-11T22:02:43.240 に答える