http://www.sqlfiddle.com/#!2/ee61b/3の例では、大きなデータを含む 2 つのテーブルがあります。
表1のように
CREATE TABLE `t1`(
`id` int(4) ,
`name` varchar(40),
`signal` int(4)
)
;
INSERT INTO `t1`
(`id`, `name`, `signal`)
VALUES
(1, 'a', 1),
(2, 'b', 1),
(3, 'c', 0),
(4, 'd', 0)
;
そして表2のように
CREATE TABLE `t2`(
`uid` int(4),
`type` int(4),
`usignal` int(4)
)
;
INSERT INTO `t2`
(`uid`, `type`, `usignal`)
VALUES
(3, 1, 1),
(1, 2, 1),
(4, 1, 0),
(2, 2, 0)
;
ここで、すべてのレコードに 1 のような条件付きを取得しようとします
。テーブル 1 のすべてのレコードはsignal
= 1
2 です。OR(+) テーブル 1 のすべてのレコードはid
(SELECT uid FROM t2
WHERE t2.type = 1 AND t2.usignal = 1)にあります。
私はそのようにします
SELECT * FROM `t1` AS g1
WHERE g1.signal = 1
UNION
SELECT * FROM `t1` AS g1
WHERE g1.id
IN (
SELECT uid
FROM `t2` AS g2
WHERE g2.usignal = 1 AND g2.type = 1
)
しかし、私はその上でいくつかの条件を実行する必要があります(mybe join、...)そして私はそれを好きです
SELECT * FROM `t1` AS g1
WHERE g1.signal = 1
UNION
SELECT * FROM `t1` AS g1
WHERE g1.id
IN (
SELECT uid
FROM `t2` AS g2
WHERE g2.usignal = 1 AND g2.type = 1
)
/*dynamic other join query here */
and id>=1 /*dynamic conditional query here*/
order by id desc limit 0,20
データが小さい場合はうまく機能しますが、私のデータは大きく、実行中に失敗します
どうすればそれを行うことができますか
編集:
私のSQLはどうですか?それはゆっくり実行してタイムアウトさせますか?
Edit02:
私はphpmyadminを使用してインデックスをクリックし、t1(id, signal)
http ://www.sqlfiddle.com/#!2/d88a9/1t2(type, unsignal)
の両方のテーブルの例にid主キーを追加し
ます
が、実際には私のテーブルには約10列あります。そして、私は左結合を使用していますが、それはまだタイムアウトです:(