ゼロ以上の「カテゴリ」または「タグ」を持つことができる「もの」の単純なデータベースがあります。特定のカテゴリの最初の N 個のオブジェクトを取得するストアド プロシージャを作成しましたが、パフォーマンスは非常に良好です。それは何かのように見えます
SELECT * FROM things
WHERE things.datestamp > @start AND things.datestamp < @end
AND EXISTS (
SELECT 1 from thing_tags
WHERE things.id = thing_tags.thing_id
AND thing_tags.tag = @searchTag
)
LIMIT ?
数十万の「もの」があり、それぞれに約 0 ~ 5 個のタグがあり、パフォーマンスは問題ありません。最初の数百の一致をせいぜい数十ミリ秒で取得できます。
ただし、一致する合計数を知りたい場合は、少なくとも数秒かかります。ただより賢い方法はありSELECT COUNT(id) FROM .... (rest of query above)
ますか?この提案id
に従って、フィールドにはインデックスが付けられていますが、 の各行のテーブルを検査する必要があるため、インデックスはあまり役に立ちません。tags
things
私はページネーションの実装を検討しており、LIMIT ?,?
(またはLIMIT ? OFFSET ?
)簡単にすることはわかっていますが、少なくとも予想される合計「一致」数の概算をユーザーに示すとよいでしょう。