1 mysql sql indexing query-optimization
我需要加快查询速度.索引表是我正在寻找的吗?如果是这样,我该怎么做?每次插入都需要更新吗?
以下是表格模式:
--table1-- | --tableA-- | --table2--
id | id | id
attrib1 | t1id | attrib1
attrib2 | t2id | attrib2
| attrib1 |
Run Code Online (Sandbox Code Playgroud)
和查询:
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
Run Code Online (Sandbox Code Playgroud)
您需要在以下位置创建综合索引tableA:
CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id)
Run Code Online (Sandbox Code Playgroud)
索引MySQL被视为表的一部分:它们会自动更新,并在优化程序决定使用它们时自动使用.
MySQL不使用该术语index table.
该术语用于Oracle指代其他数据库调用的内容CLUSTERED INDEX:一种表,其中记录本身根据列(或一组列)的值排列.
在MySQL:
使用MyISAM存储时,会将索引创建为具有.MYI扩展名的单独文件.
此文件的内容表示a B-Tree,每个叶子包含索引键和指向.MYD包含数据的文件中的偏移量的指针.
指针的大小是由称为服务器设置决定myisam_data_pointer_size,这可以从变化2到7字节,并且默认为6自MySQL 5.0.6.
这允许创建MyISAM最多2 ^ (8 * 6) bytes=的表256 TB
在InnoDB,所有表本身都是由PRIMARY KEY它排序的,它不支持堆组织表.
每个索引,因此,实际上只是一个简单的InnoDB由单一的表PRIMARY KEY的N+M记录:N记录作为一个索引值,并M记录为一个PRIMARY KEY,其保持索引的数据主表的记录.
| 归档时间: |
|
| 查看次数: |
3084 次 |
| 最近记录: |