我需要加快查询速度。我要找的是索引表吗?如果是这样,我该如何制作?我是否必须在每次插入时更新它?
这里是表模式:
--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
最佳答案
您需要在tableA
上创建一个复合索引:
CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id)
MySQL
中的索引被视为表的一部分:它们会自动更新,并在优化器决定使用它们是一个好的举动时自动使用。
MySQL
不使用术语索引表
。
此术语由 Oracle
用来指代其他数据库所称的 CLUSTERED INDEX
:一种表,其中记录本身根据列的值排列(或一组列)。
在 MySQL
中:
当您使用
MyISAM
存储时,索引将创建为具有.MYI
扩展名的单独文件。此文件的内容代表一个
B-Tree
,每个叶子包含索引键和一个指向包含数据的.MYD
文件中的偏移量的指针。指针的大小由名为
myisam_data_pointer_size
的服务器设置决定,它可以从2
到7
字节不等,默认为6
自MySQL 5.0.6
以来。这允许创建最多
2 ^ (8 * 6) 字节
=256 TB
的 在
InnoDB
中,所有表都固有地由PRIMARY KEY
排序,它不支持堆组织表。因此,每个索引实际上只是一个普通的
/li>InnoDB
表,由N+M
记录的单个PRIMARY KEY
组成:N
记录是索引值,M
记录是保存索引数据的主表记录的PRIMARY KEY
。
MyISAM
表
关于sql - 什么是 MySQL 索引表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841383/