0

300,000 レコードを超えるテーブルがあり、テーブル構造は次のとおりです。

id  |  title | source | description | date | fullindex

id は PRIMARY キー、date はインデックスを追加、source はインデックスを追加、fullindex はフルテキスト インデックスを追加。

今、私はクエリを作成したいと思います。全文検索でグループごとに最新の 5 つ。

私が試してみました

SELECT 'a' as t_name,id,title,source,description,date,fullindex 
FROM table1 a1
WHERE MATCH (fullindex) AGAINST ('+bool' IN BOOLEAN MODE)
and 6>(select count(*) from table1 where source=a1.source and date>a1.date)

しかし、このクエリには 6.5987 秒のコストがかかり、愛情は非常に低くなります。

では、より迅速なクエリを作成するにはどうすればよいでしょうか。

PS: Google で検索mysql greatest n per groupしましたが、スキルが限られているため、MySQL マスターの助けを待って、より良いコードを自分で作成することはできませんでした。

4

1 に答える 1

0

このクエリを試してください

SELECT * from
(SELECT @rn:=if(@pv=source, @rn+1, 1) as rId,
'a' t_name,id,title,@pv:=source,description,date,fullindex 
FROM table1 a1
JOIN (SELECT @pv:=0, @rId:=0)tmp
WHERE MATCH (fullindex) AGAINST ('+bool' IN BOOLEAN MODE)
ORDER BY source, date)a
WHERE a.rId <=5;

(ソース、日付) に複合インデックスを追加

お役に立てれば..

于 2013-05-15T16:57:30.113 に答える