私は6000万以上のレコードを持つデータベースを持っています。現在の設定では、3,000万以上のテーブルが1つと、それぞれに500万(ish)の小さなテーブルがいくつかあります。データ構造は各テーブルで同じです。初めて検索を作成した人(私がここに来る前の3〜4年前)は、複数の小さなテーブルを使用していました。match against
それぞれに結合を使用しています。私の上司と彼は、複数のテーブルを使用するとMySQLが各テーブルを同時に検索できるという印象を受けました。私が読んだすべての中で、誰もが1つの大きなテーブルの方が良いと言っていますが、3000万以上のテーブルが大きくなるにつれて、40秒以上かかることもあります。これは本来よりも遅いですか?
選択ステートメント
SELECT $stuff FROM table1 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table2 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table3 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table4 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table5 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table6 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table7 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table8 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table9 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table10 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE)
テーブルはMyISAMであり、colに全文索引がありますName
。Table3
は3000万以上のレコード(約10GB)を持っているものです。1つのテーブルに配置するか、分割すると、パフォーマンスが大幅に向上しますか?私は何か他のものが欠けていますか?それとも、全文検索で迅速に応答するために、6000万件以上のレコードが大きいのでしょうか。