什么是MySQL索引表?

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)

Qua*_*noi 7

您需要在以下位置创建综合索引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,这可以从变化27字节,并且默认为6MySQL 5.0.6.

    这允许创建MyISAM最多2 ^ (8 * 6) bytes=的表256 TB

  • InnoDB,所有表本身都是由PRIMARY KEY它排序的,它不支持堆组织表.

    每个索引,因此,实际上只是一个简单的InnoDB由单一的表PRIMARY KEYN+M记录:N记录作为一个索引值,并M记录为一个PRIMARY KEY,其保持索引的数据主表的记录.