私は500GBのMySQLデータベースがある私の修士号のプロジェクトを行っています。私のプロジェクトはStackOverflowと関係があります。選択クエリを最適化する必要があります。実行するのに1分かかるため、私はJavaを使用してGUIを作成しているだけで、時間がかかりすぎると思っています。これは、私が持っているテーブルと関連情報です:複数のテーブルとビッグデータを使用したクエリの最適化
テーブル:22 222 747レコードのタグ。タグのための
インデックス。
表:8つの117 955レコードを持つリンク。蓋と援助の指標。 14件の401 786レコードを持つ回答:リンク
表について
インデックス。援助とqidに関する指数。回答
表について
インデックス:7つの495 155レコードを質問。質問のための
インデックス。
アイデアは、私は人々が答えを投稿するリンクをリダイレクト収集していると私のツールは、ユーザーが何を望んでいるかによって、いくつかのリンクをお勧めします。ユーザーは多くのタグを指定できますが、簡単にするために2つのタグを想定してみましょう。その後、私は1を追加し、ユーザーが3個の以上のタグを頼む場合
:
SELECT questions.title, links.url
FROM questions, answers, links, tags
WHERE questions.qid = tags.qid
AND answers.qid = questions.qid
AND answers.aid = links.aid
AND (tags.tag = 'php' OR tags.tag = 'mysql')
GROUP BY tags.qid, links.url HAVING count(*) = 2;
これは、上記のクエリの説明の絵です:これは私が使用していますクエリですより多くのOR条件とカウント(*)=タグの数。
私はMySQLのプロではないので、改善する方法があると確信しています。私はqid、援助とタグの長さが10のインデックスを作成しました。私はそれを回避する方法がない限り、可能であればテーブルを変更しないでください。
ありがとうございました!
ポストデータモデル。クエリが実際に何をしているかを見ることができるように、実行計画(計画を説明)を投稿してください。 –
私が持っているすべてのテーブルのすべてのインデックスを必要としていますか? – Paul
クエリに関連するすべてのテーブル(すべて4です) –