テーブル tbdb.ratedat、10GB サイズ、8KW レコード、構造があります。
mysql> DESC ratedat;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| trade_id | bigint(20) | NO | PRI | NULL | |
| trade_time | int(10) | NO | | NULL | |
| uid_buy | bigint(20) | NO | MUL | NULL | |
| uid_sell | bigint(20) | NO | MUL | NULL | |
| goods_title | varchar(120) | NO | MUL | NULL | |
| goods_price | decimal(10,2) | NO | | NULL | |
| rate_txt | text | NO | MUL | NULL | |
+-------------+---------------+------+-----+---------+-------+
7 rows in set (0.01 sec)
rate_buyer の構造
mysql> DESC rate_buyer;
+-----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| uid | bigint(20) | NO | PRI | NULL | |
| sex | tinyint(1) | NO | MUL | 0 | |
| costsum | decimal(12,2) | NO | | 0.00 | |
| costavg | decimal(12,2) | NO | | 0.00 | |
| costmax | decimal(12,2) | NO | | 0.00 | |
| costmin | decimal(12,2) | NO | | 0.00 | |
| costcount | int(10) | NO | | 0 | |
| timefirst | int(10) | NO | | NULL | |
| timelast | int(10) | NO | | NULL | |
| is_seller | tinyint(1) | NO | MUL | 0 | |
| uptime | int(10) | NO | | NULL | |
+-----------+---------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
この結果が欲しいので、任意のキーワードを検索して、tbdb.ratedat とは異なる uid_sell をリストします。
SELECT a.*,b.goods_title,b.goods_price,COUNT(b.trade_id) AS relike
FROM rate_buyer a
INNER JOIN ratedat b ON a.uid=b.uid_buy
WHERE b.goods_title LIKE '%MP3%'
GROUP BY a.uid ORDER BY relike DESC LIMIT 0 , 100 ;
しかし、tbdb.ratedat のサイズは 10GB を超えています。SQL を実行すると、プログラムの実行がタイムアウトします。そのSQLのような結果を得るにはどうすればよいですか?