1

where ... limit 100000 200mysqlはまだ最初の100000行をスキャンするため、実行が遅いことを覚えています。100万を超える行を取得するには、数秒(ミリ秒ではなく)かかりました。とにかく私はサイトのデザイン段階にいます。のような複数のタグで検索したいのですがcpp sockets

すばやく検索しようとしています。私の選択肢は、ページ番号を使用する代わりに、タイムスタンプ(64ビット整数として)を使用するか、最小/最大行番号を使用することだと思います。しかし、私はそれよりもさらに先に進む必要があるかもしれないと思いますか?

ルックアップテーブルが必要だと思っているので、投稿123456789にタグcppソケットがある場合は、タグIDにインデックスを付けてルックアップテーブル(lookupid、tagid、postid)に投稿を挿入します。カウントが最も低いものを特定し(count(*)を使用するか、現在のカウントを保持している行を更新しますか?)、次のようなステートメントで検索できます。

select postid from Post p join
(select postid from tag_lookup where tag=@tag_with_lowest_count and post_id<@post_id_limit) 
  as t2 on p.id=t2.postid
//i'm not sure how to write a where that checks if a post has every tag in a list.
where @array_length_as_a_param == (select count(*) from tag where tag.postid=p.postid 
  and in @array //dapper probably handles this for me. Unsure if this is connrect

私はデータやテーブルなどを持っていないので、explainまだ使用できません(私もそれを読むのはやや悪いです)。ブレーンストーミングをしています。したがって、次/前のページを実行していて、ページ番号ではなくpost_idを使用しているかどうかに応じて、>または<を使用します。

誰かが私と一緒にランダムなタグで高速ページルックアップを取得するための素晴らしい適切な方法を考えることができますか?

4

1 に答える 1

2
  1. select count([your-primary-key])の代わりに使用し*ます。
  2. タグと投稿の postid にインデックスを使用します。
  3. where句で等しいかどうかをテストする代わりに、結合を使用してください。

それはざっと見ただけです。これら 3 つを実行してもまだ十分なパフォーマンスが得られない場合は、クエリの説明の結果を投稿してください。喜んで見ていきます。

于 2012-12-28T05:49:54.087 に答える