我需要加快查询速度。索引表是我正在寻找的吗?如果是这样,我该怎么做?每次插入都需要更新吗?
以下是表格模式:
--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
答案 0 :(得分: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
的服务器设置决定,该设置可以从2
到7
字节不等,默认为6
,因为{{1 }}
这样可以创建MySQL 5.0.6
表格,最多MyISAM
= 2 ^ (8 * 6) bytes
在256 TB
中,所有表都由InnoDB
固有地排序,它不支持堆组织表。
因此,每个索引实际上只是一个简单的PRIMARY KEY
表,由InnoDB
个PRIMARY KEY
个N+M
个记录组成:N
个记录是索引值,{ {1}}记录为保存索引数据的主表记录的M
。