我需要加快查询速度。索引表是我要找的吗?如果是这样的话,我该怎么做呢?我必须在每次插入时更新它吗?
下面是表模式:
--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发布于 2009-05-08 19:31:52
您需要在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的服务器设置确定,该设置可以从2字节到7字节变化,并且从MySQL 5.0.6开始缺省为6。
这允许创建直到2 ^ (8 * 6) bytes = 256 TB
InnoDB的MyISAM表,所有的表都按PRIMARY KEY进行固有的排序,它不支持按堆组织的表。因此,每个索引实际上只是一个普通的InnoDB表,由N+M记录的单个PRIMARY KEY组成:N记录是索引值,M记录是保存索引数据的主表记录的PRIMARY KEY。
https://stackoverflow.com/questions/841383
复制相似问题