1

クエリを高速化する必要があります。インデックステーブルは私が探しているものですか?もしそうなら、どうすればそれを作ることができますか?挿入するたびに更新する必要がありますか?

テーブルスキーマは次のとおりです。

--table1--   |   --tableA--   |    --table2--
id           |   id           |    id
attrib1      |   t1id         |    attrib1
attrib2      |   t2id         |    attrib2
             |   attrib1      |

そしてクエリ:

SELECT 
  table1.attrib1, 
  table1.attrib2,
  tableA.attrib1 
FROM 
  table1,
  tableA
WHERE 
  table1.id = tableA.t1id
  AND (tableA.t2id = x or ... or tableA.t2id = z)
GROUP BY 
  table1.id
4

1 に答える 1

7

に複合インデックスを作成する必要がありますtableA:

CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id)

のインデックスはMySQLテーブルの一部と見なされます。インデックスは自動的に更新され、オプティマイザーがインデックスを使用するのが適切であると判断したときに自動的に使用されます。

MySQLという用語は使用しませんindex table

この用語はOracle、他のデータベースが呼ぶものを指すために使用されCLUSTERED INDEXます。列 (または列のセット) の値に従ってレコード自体が配置される一種のテーブルです。

MySQL

  • ストレージを使用するMyISAMと、インデックスは拡張子を持つ別のファイルとして作成されます.MYI

    このファイルの内容は を表しB-Tree、各リーフにはインデックス キーと、.MYDデータを含むファイル内のオフセットへのポインタが含まれます。

    ポインタのサイズはmyisam_data_pointer_size、と呼ばれるサーバー設定によって決定されます。276MySQL 5.0.6

    これにより、最大=MyISAMまでのテーブルを作成できます2 ^ (8 * 6) bytes256 TB

  • ではInnoDB、すべてのテーブルが によって本質的に順序付けられPRIMARY KEYます。ヒープ構成テーブルはサポートされていません。

    InnoDBしたがって、各インデックスは、実際には単一PRIMARY KEYN+Mレコードで構成される単純なテーブルです。Nレコードはインデックス付きの値であり、MレコードPRIMARY KEYはインデックス付きのデータを保持するメイン テーブル レコードです。

于 2009-05-08T19:31:51.710 に答える